我对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;
}
任何人都知道为什么手势识别器不起作用?
编辑:
以下是一些细节:
initWithFrame:
方法中添加了手势识别器。touchesBegan
,touchesMoved
和touchesEnded
。但是,根据这个question,视图控制器实现的那些不应该影响视图的手势识别。<小时/> 编辑2:
我已经确认没有其他视图通过手势识别器阻止视图接收触摸。我还验证了视图实际上已添加到包含视图控制器的视图中。似乎问题出在其他地方。
答案 0 :(得分:2)
你的设置应该有效,所以我猜两件事中有一件事正在发生。您可能忘记将此视图实际添加到ViewController的视图中,或者此视图顶部可能还有另一个视图正在窃取触摸?
答案 1 :(得分:0)
导致此问题的另一种可能性是添加UITapGestureRecognizer的视图不够大,因此当您点击屏幕时,触摸点不在视图的边界内。
答案 2 :(得分:0)
还要确保UIView不透明。将背景颜色设置为例如黑色。这解决了我的问题。