调用setCancelsTouchesInView时会发生什么?

想知道当我调用setCancelsTouchesInView时会发生什么。 这不包括在官方文档中http://developer.apple.com/library/ios/#documentation/uikit/reference/UIGestureRecognizer_Class/Reference/Reference.html

谢谢

ACB引用了UIGestureRecognizer参考资料。 为了使它更具体一点,假设你有一个连接了平移手势识别器的视图,并且在视图控制器中有这些方法:

 - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { NSLog(@"touchesBegan"); } - (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { NSLog(@"touchesMoved"); } - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { NSLog(@"touchesEnded"); } - (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event { NSLog(@"touchesCancelled"); } - (IBAction)panGestureRecognizerDidUpdate:(UIPanGestureRecognizer *)sender { NSLog(@"panGesture"); } 

当然,平移手势识别器被configuration为发送panGestureRecognizerDidUpdate:消息。

现在假设你触摸视图,移动你的手指足够的平移手势被识别,然后举起你的手指。 什么应用程序打印?

如果手势识别器将cancelsTouchesInView设置为YES则应用程序将logging这些消息:

 touchesBegan touchesMoved touchesCancelled panGesture panGesture (etc.) 

在取消之前,您可能会获得多个touchesMoved

因此,如果将cancelsTouchesInView设置为YES (默认值),则系统将在从手势识别器发送第一条消息之前取消该触摸,并且您将不会再获得与该触摸相关的更多触摸消息。

如果手势识别器将cancelsTouchesInView设置为NO则应用程序将logging这些消息:

 touchesBegan touchesMoved panGesture touchesMoved panGesture touchesMoved panGesture (etc.) panGesture touchesEnded 

因此,如果您将cancelsTouchesInView触摸查看设置为NO ,则系统将继续发送手势触摸的触摸相关消息,并与手势识别器的消息交织。 触摸将正常结束,而不是被取消(除非系统取消了其他原因的触摸,如在触摸过程中按下主页button)。

从苹果开发者门户链接 :

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

cancelsTouchesInView:

一个布尔值,影响识别手势时是否将触摸传递给视图。

@property(nonatomic)BOOL cancelsTouchesInView

讨论

当此属性为YES(默认值)并且接收方识别其手势时,该待处理手势的触摸将不会传送到视图,而先前传送的触摸将通过touchesCancelled:withEvent:消息发送到视图来取消。 如果手势识别器不识别其手势,或者如果此属性的值为NO,则视图接收多点触摸序列中的所有触摸。