触摸在iPhone中调用Canceled方法?

时间:2011-04-21 04:50:15

标签: iphone uitouch

我能够理解当用户触摸视图时,触及Began和Ended。当用户在视图上滑动手时,触摸Moved方法被调用。但什么时候接触被取消被调用或用户对该方法进行什么操作?

5 个答案:

答案 0 :(得分:32)

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

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

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

另外,请查看手势识别器上的WWDC videos(从2010年开始)。

答案 1 :(得分:14)

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

e.g。

[UIView animateWithDuration:0.3 delay:0 options:UIViewAnimationOptionAllowUserInteraction animations:^{
            self.aView.hidden = NO;
            self.aView.alpha = 1;
        } completion:nil];

答案 2 :(得分:3)

来自Apple Reference文件

  

系统发送到接收器   事件(例如低内存警告)   取消触摸事件。

     

<强>讨论

     

当Cocoa时调用此方法   触摸框架接收系统   需要取消的中断   触摸事件;对此,它   生成一个带有的UITouch对象   UITouchPhaseCancel的阶段。该   中断是可能的   导致应用程序不再存在   活动或要删除的视图   窗口

     

当一个物体收到一个   touchesCancelled:withEvent:给它发消息   应该清理任何国家信息   那是在其中建立的   的touchesBegan:withEvent:方法   实施

     

此默认实现   方法什么也没做。但是很快   UIKit UIRsponder的子类,   特别是UIView,转发   消息响应者链。

答案 3 :(得分:3)

而且,来自Event Handling Guide for iOS,p。 19:

  

当触摸序列被系统事件取消时,它会发送touchesCancelled:withEvent:消息,例如来电。

答案 4 :(得分:0)

enter image description here

我正在touchesBegan()下的视图上处理touchesMoved() / UIScrollView,这极具挑战性。捏捏时,我的触摸会一直被取消(某种程度上单点触摸就可以了),我正在研究如何停止被取消。我发现,UIScrollView上有一个属性Can Cancel On Scroll,如果您的情况与我的情况相似,您可以选中它以停止取消。

在很多情况下,您的触摸被取消,所以我的答案只是其中之一。