和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 (可能会delaysTouchesBegandelaysTouchesEnded )设置为NO 。 手势识别器的默认行为是为了避免它和视图都处理触摸。 这些设置可以让您调整该行为。

如前所述,您需要在cancelTouchesInView属性设置为NO

从Apple Docs:

取消触摸观看 – 如果手势识别器识别其手势,则从其视图中解除该手势的其余触摸(所以窗口不会传送它们)。 该窗口用(touchesCancelled:withEvent :)消息取消先前传递的触摸。 如果手势识别器未识别其手势,则该视图接收多点触摸序列中的所有触摸。

进一步阅读: https : //developer.apple.com/library/ios/documentation/UIKit/Reference/UIGestureRecognizer_Class/