调用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,则视图接收多点触摸序列中的所有触摸。