和UIGestureRecognizer一起听UITouch事件
我正在创build一个自定义的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];
您需要将手势识别器的cancelsTouchesInView
(可能会delaysTouchesBegan
和delaysTouchesEnded
)设置为NO
。 手势识别器的默认行为是为了避免它和视图都处理触摸。 这些设置可以让您调整该行为。
如前所述,您需要在cancelTouchesInView
属性设置为NO
。
从Apple Docs:
取消触摸观看 – 如果手势识别器识别其手势,则从其视图中解除该手势的其余触摸(所以窗口不会传送它们)。 该窗口用(touchesCancelled:withEvent :)消息取消先前传递的触摸。 如果手势识别器未识别其手势,则该视图接收多点触摸序列中的所有触摸。
进一步阅读: https : //developer.apple.com/library/ios/documentation/UIKit/Reference/UIGestureRecognizer_Class/