当我添加平移手势识别器时,我的按钮不会保持突出显示?

Posted

技术标签:

【中文标题】当我添加平移手势识别器时,我的按钮不会保持突出显示?【英文标题】:My button wont stay highlighted when I add a pan gesture recognizer? 【发布时间】:2012-08-13 01:13:48 【问题描述】:

我在UIButton 中添加了UIPanGestureRecognizer。现在,当我按下按钮后用手指拖动一小段距离时,按钮停止突出显示。通常,除非您将 UIButtons 框架拖出很远,否则 UIButton 将保持突出显示。但是,使用平移手势识别器,现在即使我稍微拖动,按钮也会停止突出显示。

我的代码中没有将按钮高亮属性设置为否。我什至尝试擦除平移手势识别器动作选择器中的所有代码(每当我平移按钮时都会调用该方法)。

我还尝试在平移手势识别器的操作选择器中将按钮的突出显示属性设置为 NO。

这种工作只是突出显示闪烁。当您平移时,突出显示的内容消失了,然后很快又回来了,就像闪光灯一样。所以,这也行不通。有什么想法吗?

【问题讨论】:

【参考方案1】:

默认情况下,手势将取消它们链接到的视图中的触摸。因此,当您的按钮中的触摸被取消时,它变得不突出。为防止这种行为,请将手势的 cancelsTouchesInView 属性设置为 NO

【讨论】:

【参考方案2】:

这会起作用

-(void) panDetected:(UIGestureRecognizer *) gesture 

    if(gesture.state == UIGestureRecognizerStateBegan)
    
        yourButton.backgroundImageView.image = [UIImage imageNamed:@"your_button_highlited_image.png"];
    
    else if(gesture.state == UIGestureRecognizerStateChanged)
    

    
    else if(gesture.state == UIGestureRecognizerStateEnded)
    
        yourButton.backgroundImageView.image = [UIImage imageNamed:@"your_button_normal_image.png"];
    

【讨论】:

UIGestureRecognizer 没有属性 backgroundImageView 我仍然竖起大拇指,因为你努力了 :=) 我复制并粘贴了具有相同要求且运行良好的代码。这里的“self”是我为其添加了手势识别器的视图控制器。 backgroundImageView 是它的一个属性,它实际上是背景 ImageView。【参考方案3】:

我也遇到过同样的问题。 borrrden 是对的;要修复它,请将 viewController 设置为 gestureRecognizer 的委托,如果触摸在 IUButton 上,则取消触摸。首先在 .h 文件中添加协议 `UIGestureRecognizerDelegate。然后,在创建手势识别器后,将视图控制器设置为其委托:

UITapGestureRecognizer *gestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(aMethod)];
gestureRecognizer.delegate = self;
[self.view addGestureRecognizer:gestureRecognizer];
[gestureRecognizer release];

最后覆盖shouldReceiveTouch并取消不需要的触摸:

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch

    if ([touch.view isKindOfClass:[UIButton class]])  //Do not override UIButton touches
        return NO;
    
    return YES;

【讨论】:

以上是关于当我添加平移手势识别器时,我的按钮不会保持突出显示?的主要内容,如果未能解决你的问题,请参考以下文章

一起识别长按和平移手势识别器

滚动视图平移防止捏手势?

使用不跟随拇指的屏幕边缘平移手势识别器的弹出视图控制器

是否可以在按钮上启动滚动视图平移手势

为啥我的平移手势只能在第二次输入后识别事件?

为啥我的 watchkit 应用程序没有在“开始”状态调用我的平移手势识别器处理代码?