触摸在iPhone中调用Canceled方法?

Kri*_*nan 19 iphone uitouch

我能够理解,当用户触摸视图时,触及Began和Ended.当用户在视图上滑动手时,触摸Moved方法被调用.但什么时候触及Canceled得到调用或者用户对该方法的调用是什么?

Stu*_*art 33

我认为可能是调用touchesCancelled的最常见原因(因为iOS 3.2无论如何)是跟随UIGestureRecognizer识别手势.如果您的视图附加了任何类型的手势识别器,那么提供touchesCancelled方法的自定义实现通常非常重要 - 请注意这包括使用手势识别器(包括UIScrollView)的现成视图.

默认情况下,手势识别器会在识别时取消触摸测试视图的触摸传递,但可以禁用此行为.这涉及将touchesCancelled消息发送到该视图,最有可能是在touchesBegan或touchesMoved消息之后.如果您的触摸处理代码依赖于touchesEnded方法中实现的代码,则可能永远不会触发此问题并且可能发生某种严重问题,因此需要在touchesCancelled中正确绑定任何松散的末尾.

手势识别器功能的细节显然比我在这里提到的要复杂得多 - 我会完全推荐阅读Apple的Gesture Recognizers文档.

另外,查看手势识别器上的WWDC视频(从2010年开始).

  • 您可以通过为每个`UIGestureRecognizer`设置`cancelsTouchesInView`为"NO"来禁用此行为. (3认同)

小智 14

注意:如果您之后开始UIView动画,触摸也会被取消touchesBegan.为了防止这种情况,请确保包含UIViewAnimationOptionAllowUserInteraction:

例如

[UIView animateWithDuration:0.3 delay:0 options:UIViewAnimationOptionAllowUserInteraction animations:^{
            self.aView.hidden = NO;
            self.aView.alpha = 1;
        } completion:nil];
Run Code Online (Sandbox Code Playgroud)