我正在创建自定义UIView并在其上添加UITapGestureRecognizer。我有一个轻拍手势的处理程序。但与此同时,我希望我的UIView能够收听touchesBegan& touchesEnded方法。我已经实现了gestureRecognizer:shouldReceiveTouch:方法,但是touchesBegan / touchesEnded方法也没有被调用。有什么线索的原因?
在我的自定义UIView
中- (BOOL)gestureRecognizer:(UIGestureRecognizer *)iGestureRecognizer shouldReceiveTouch:(UITouch *)iTouch {
return YES;
}
在我的视图控制器中
MyCustomView aCustomView = [[[MyCustomView alloc] init] autorelease];
UIGestureRecognizer *myGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleGesture:)];
[aCustomView addGestureRecognizer:myGestureRecognizer];
[myGestureRecognizer release];
答案 0 :(得分:10)
您需要为手势识别器设置cancelsTouchesInView
(可能delaysTouchesBegan
和delaysTouchesEnded
)至NO
。手势识别器的默认行为是避免让它和视图处理触摸。这些设置可以让您微调该行为。
答案 1 :(得分:0)
如前所述,您需要在cancelTouchesInView
上将NO
属性设置为UITapGestureRecognizer
。
来自Apple Docs:
cancelsTouchesInView - 如果手势识别器识别出其手势, 它从他们的视角中取消了该手势的剩余触摸(所以 窗口不会传递它们)。窗口取消之前的 使用(touchesCancelled:withEvent :)消息传递触摸。如果一个 手势识别器无法识别其手势,视图会收到 多触摸序列中的所有触摸。
进一步阅读: https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIGestureRecognizer_Class/