1

我正在尝试使用 UIBezierPath 编写程序并触摸方法。我对两种触摸方法感到困惑:

- (void)touchesCancelled:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event;
- (void)touchesEnded:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event;

我不明白何时调用这些方法或如何调用它们。起初我以为它们都是一样的,直到我在某个地方读到它们不是。问题是:我如何调用其中一种方法,它们之间有何不同?

4

2 回答 2

3

你不应该调用这些方法。它们由Cocoa框架为您调用。您只需要实现它们即可为您的子类UIResponser或自定义UIGestureRecognizer子类提供正确的(本机)行为。

有关如何实现这些方法的更多详细信息,请参阅Apple关于子类化的指南。UIResponder

来自Apple关于- (void)touchesEnded:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event方法的文档:

当一根或多根手指从视图或窗口中抬起时通知响应者。

来自Apple关于- (void)touchesCancelled:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event方法的文档:

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

于 2016-01-23T11:28:14.220 回答
1

Apple 的这份文件为您提供了有关该touchesCancelled事件的答案:

如果响应者在处理事件时创建了持久对象,它应该实现touchesCancelled:withEvent: 方法以在系统取消序列时处理这些对象。当外部事件(例如,来电)中断当前应用程序的事件处理时,就会发生取消。请注意,响应者对象还应在接收到touchesEnded:withEvent:多点触控序列的最后一条消息时处理任何持久对象。

当您在应用程序中为自定义对象实现自定义触摸事件处理时,这些方法是必需的。它允许您在用户停止触摸您的自定义对象或取消触摸时清理资源。

于 2016-01-23T11:27:45.767 回答