我正在尝试使用UIBezierPath编写一个程序并触摸方法。我对两种触摸方法感到困惑:
- (void)touchesCancelled:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event;
- (void)touchesEnded:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event;
我不明白何时调用这些方法或如何调用它们。起初我以为它们都是一样的,直到我在某处读到它们不是。问题是:我如何调用这些方法之一,它们彼此之间有何不同?
你不应该调用这些方法。它们由可可框架为您调用。您只需要实现它们即可为您的UIResponser
子类或自定义UIGestureRecognizer
子类提供正确的(本机)行为。
请参阅 Apple 关于子类化UIResponder
的指南,了解有关如何实现这些方法的更多详细信息。
来自Apple关于- (void)touchesEnded:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
方法的文档:
当一个或多个手指从视图或窗口中抬起时,告诉响应者。
来自Apple关于- (void)touchesCancelled:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
方法的文档:
当系统事件(如内存不足警告)取消触摸事件时发送到接收器。
Apple的这份文档为您提供有关touchesCancelled
事件的答案:
如果响应程序在处理事件时创建持久对象,则当系统取消序列时,它应实现
touchesCancelled:withEvent
: 方法来释放这些对象。当外部事件(例如,传入电话呼叫)中断当前应用的事件处理时,会发生取消。请注意,响应程序对象在收到多点触控序列的最后一条touchesEnded:withEvent:
消息时,还应释放任何持久性对象。
在应用程序中为自定义对象实现自定义触摸事件处理时,这些方法是必需的。它允许您在用户停止触摸您的自定义对象或取消触摸时清理资源。