想知道当我调用 setCancelsTouchesInView 时会发生什么。官方文档http://developer.apple.com/library/ios/#documentation/uikit/reference/UIGestureRecognizer_Class/Reference/Reference.html中没有涉及
谢谢
想知道当我调用 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");
}
当然,平移手势识别器被配置为发送panGestureRecognizerDidUpdate:
消息。
现在假设您触摸视图,移动手指足以识别平移手势,然后抬起手指。应用程序打印什么?
如果手势识别器cancelsTouchesInView
设置为YES
,应用程序将记录以下消息:
touchesBegan
touchesMoved
touchesCancelled
panGesture
panGesture
(etc.)
touchesMoved
在取消之前您可能会得到不止一个。
因此,如果您设置cancelsTouchesInView
为YES
(默认值),系统将在从手势识别器发送第一条消息之前取消触摸,并且您不会再收到与该触摸相关的任何触摸消息。
如果手势识别器cancelsTouchesInView
设置为NO
,应用程序将记录以下消息:
touchesBegan
touchesMoved
panGesture
touchesMoved
panGesture
touchesMoved
panGesture
(etc.)
panGesture
touchesEnded
因此,如果您设置cancelsTouchesInView
为NO
,系统将继续发送与手势触摸相关的消息,并与手势识别器的消息交错。触摸将正常结束而不是被取消(除非系统出于其他原因取消触摸,例如在触摸期间按下主页按钮)。
从苹果开发者门户链接:
cancelsTouchesInView — 如果手势识别器识别出它的手势,它会解除该手势的剩余触摸与视图的绑定(因此窗口不会传递它们)。窗口使用 (touchesCancelled:withEvent:) 消息取消先前传递的触摸。如果手势识别器无法识别其手势,则视图将接收多点触摸序列中的所有触摸。
取消TouchesInView:
一个布尔值,影响在识别手势时是否将触摸传递到视图。
@property(nonatomic) BOOL cancelsTouchesInView
讨论
当此属性为 YES(默认值)并且接收器识别其手势时,该手势的未决触摸不会传递到视图,并且先前传递的触摸会通过发送到视图的 touchesCancelled:withEvent: 消息取消。如果手势识别器无法识别其手势或者此属性的值为 NO,则视图将接收多点触控序列中的所有触摸。