iOS触摸方法(已取消和已结束)何时被调用?

时间:2016-01-23 10:44:36

标签: ios objective-c touches touchesended touchescancelled

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

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

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

2 个答案:

答案 0 :(得分:3)

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

有关如何实施这些方法的详细信息,请参阅Apple's guide关于子类UIGestureRecognizer的内容。

Apple's documentation关于UIResponder方法:

  

告诉响应者何时从视图或窗口抬起一个或多个手指。

Apple's documentation关于- (void)touchesEnded:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event方法:

  

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

答案 1 :(得分:1)

来自Apple的

This document为您提供有关touchesCancelled事件的答案:

  

如果响应者在处理事件时创建持久对象,它应该实现touchesCancelled:withEvent:方法,以便在系统取消序列时处置这些对象。 当外部事件(例如传入的电话呼叫)中断当前应用的事件处理时会发生取消。请注意,响应者对象在收到最后一个{{1}时也应该处置任何持久对象消息为多点触控序列。

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