2012-10-24 47 views

回答

29

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 

所以,如果你设置cancelsTouchesInViewNO,系统会继续发送的触摸相关的消息手势触摸,与手势识别器的消息交织。触摸将正常结束,而不是被取消(除非系统因其他原因取消触摸,例如在触摸过程中按下主页按钮)。

+0

谢谢!当您将cancelsTouchesInView设置为否时,该事件将取消弹出权限? – jebberwocky

+1

我不明白“取消弹出”的意思。 –

3

从苹果开发者门户link

cancelsTouchesInView - 如果一个手势识别器识别出它的姿态, 它解除绑定的剩余触摸从他们的角度看这个手势(所以 窗口不会传递他们)。该窗口取消之前的 传送的触摸(touchesCancelled:withEvent :)消息。如果手势识别器未识别其手势,则该视图将在多点触摸序列中接收到所有触摸。 。

cancelsTouchesInView:

一个布尔值影响是否触摸被 递送到视图时姿势被识别。

@属性(非原子)BOOL cancelsTouchesInView

讨论

当此 属性是YES(缺省)和接收器识别其手势, 被挂起的该姿势的触摸没有递送到 视图,并且先前递送的触摸通过 触摸取消:withEvent:发送到视图的消息。如果手势 识别器无法识别其手势,或者此属性的值为NO,则该视图会接收多点触摸 序列中的所有触摸。

+0

什么是由“那是暂停的手势的触摸”? –

相关问题