想知道当我调用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,则系统将继续发送与手势识别有关的消息,这些信息与手势触摸有关。触摸将正常结束而不是被取消(除非系统由于其他原因取消触摸,例如在触摸过程中按下了主页按钮)。

10-08 07:48