为什么这个UITapGestureRecognizer无法识别水龙头?

时间:2013-12-15 04:13:43

标签: ios iphone objective-c uigesturerecognizer uitapgesturerecognizer

我对UITapGestureRecognizer有点问题。我这样创造它:

self.userInteractionEnabled = YES;

UITapGestureRecognizer *tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap:)];
tapRecognizer.cancelsTouchesInView = NO;
tapRecognizer.delaysTouchesBegan = YES;
tapRecognizer.delegate = self;
tapRecognizer.numberOfTapsRequired = 1;
tapRecognizer.numberOfTouchesRequired = 1;
[self addGestureRecognizer:tapRecognizer];

在头文件中,我还包括并实现shouldReceiveTouch:方法,如下所示:

-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
    return YES;
}

我已经看过无数线程中遇到类似问题的人,似乎无法找到解决方案。我听说如果你添加手势识别器的视图的子视图userInteractionEnabled设置为YES,那么可能会影响点击识别,所以我也包括这个:

for(UIView *subview in self.subviews) {
    subview.userInteractionEnabled = NO;
}

任何人都知道为什么手势识别器不起作用?


编辑:

以下是一些细节:

  • 我正在将UITapGestureRecognizer添加到UIView子类中。
  • 我在子类'initWithFrame:方法中添加了手势识别器。
  • 我已经通过逐步执行实际添加的代码部分来验证手势识别器的添加。
  • 包含此视图的视图控制器没有附加任何手势识别器,但确实实现了touchesBegantouchesMovedtouchesEnded。但是,根据这个question,视图控制器实现的那些不应该影响视图的手势识别。

<小时/> 编辑2:

我已经确认没有其他视图通过手势识别器阻止视图接收触摸。我还验证了视图实际上已添加到包含视图控制器的视图中。似乎问题出在其他地方。

3 个答案:

答案 0 :(得分:2)

你的设置应该有效,所以我猜两件事中有一件事正在发生。您可能忘记将此视图实际添加到ViewController的视图中,或者此视图顶部可能还有另一个视图正在窃取触摸?

答案 1 :(得分:0)

导致此问题的另一种可能性是添加UITapGestureRecognizer的视图不够大,因此当您点击屏幕时,触摸点不在视图的边界内。

答案 2 :(得分:0)

还要确保UIView不透明。将背景颜色设置为例如黑色。这解决了我的问题。