想知道当我调用setCancelsTouchesInView时会发生什么。官方文件http://developer.apple.com/library/ios/#documentation/uikit/reference/UIGestureRecognizer_Class/Reference/Reference.html中未涉及
谢谢
最佳答案
ACB引用了UIGestureRecognizer
引用。为了更具体一点,假设您有一个带有平移手势识别器的 View ,并且在 View Controller 中有以下方法:
- (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:
消息。现在,假设您触摸 View ,将手指移动到足以识别出摇摄手势的位置,然后抬起手指。该应用程序打印什么?
如果手势识别器的
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
,则系统将继续发送与手势识别有关的消息,这些信息与手势触摸有关。触摸将正常结束而不是被取消(除非系统由于其他原因取消触摸,例如在触摸过程中按下了主页按钮)。