我在UIPanGestureRecognizer
添加了UIButton
。现在,当我按下按钮后用手指拖动一小段距离时,按钮停止突出显示。通常情况下,UIButton将保持高亮显示,除非您在UIButtons框架外拖得很远。但是,使用平移手势识别器,现在即使我拖动一点,按钮也会停止突出显示。
我的代码中没有任何内容将突出显示的属性设置为no。我甚至试图擦除我的平移手势识别器动作选择器中的所有代码(每当我按下按钮时调用的方法)。
我还尝试在平移手势识别器的动作选择器中将按钮的突出显示属性设置为NO。
这种工作只是突出显示闪烁。当您平移突出显示消失时,然后快速返回,就像闪光灯一样。所以,这也不起作用。有什么想法吗?
答案 0 :(得分:4)
默认情况下,手势将取消与其链接的视图中的触摸。因此,当按钮中的触摸被取消时,它变得不那么明显。要防止出现此问题,请将您的手势的cancelsTouchesInView
属性设置为NO
。
答案 1 :(得分:1)
这将有效
-(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"];
}
}
答案 2 :(得分:0)
我遇到过同样的问题。 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;
}