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