想知道当我调用setCancelsTouchesInView时会发生什么。官方文件http://developer.apple.com/library/ios/#documentation/uikit/reference/UIGestureRecognizer_Class/Reference/Reference.html
中未涉及此问题由于
答案 0 :(得分:31)
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
,系统将继续发送手势触摸的触摸相关消息,与手势识别器的消息交错。触摸将正常结束而不是被取消(除非系统因某些其他原因取消触摸,例如在触摸期间按下主页按钮)。
答案 1 :(得分:2)
来自Apple开发人员门户网站link:
cancelsTouchesInView - 如果手势识别器识别出其手势, 它从他们的视角中取消了该手势的剩余触摸(所以 窗口不会传递它们)。窗口取消之前的 使用(touchesCancelled:withEvent :)消息传递触摸。如果一个 手势识别器无法识别其手势,视图会收到 多触摸序列中的所有触摸。
<强> cancelsTouchesInView:强>
影响触摸是否为的布尔值 在识别出手势时传送到视图。
@property(非原子)BOOL cancelsTouchesInView
讨论
当这个 属性为YES(默认值),接收器识别其手势, 挂起的那个手势的触摸不会被传递给 查看和以前交付的触摸通过a取消 touchesCancelled:withEvent:消息发送到视图。如果一个手势 识别器无法识别其手势或此值 属性为NO,视图接收多点触控中的所有触摸 序列