什么是 UIControl 事件 TouchCancel?

What is UIControlEventTouchCancel?

当用户点击并按住我的应用程序中的 UIButton 时,会在一段时间后触发 UIControlEventTouchCancel 事件。 UIControl 的 Apple 文档没有关于此事件的任何详细说明。为什么会触发?它有什么用?

[button addTarget:key action:@selector(keyUp:) forControlEvents:UIControlEventTouchUpInside];
[button addTarget:key action:@selector(keyUp:) forControlEvents:UIControlEventTouchUpOutside];
[button addTarget:key action:@selector(keyCancel:) forControlEvents:UIControlEventTouchCancel];
[button addTarget:key action:@selector(keyDown:) forControlEvents:UIControlEventTouchDown];

According to the documentation,一个 UIControlEventTouchCancel 事件是由于:

A system event canceling the current touches for the control.

因此,触摸结束不是由于用户输入,而是系统事件(例如内存不足警告,或应用程序进入后台)。 我不知道为什么你只需按住按钮就可以触发它。

我很确定它与 UIRespondertouchesCancelled:withEvent: 事件类似(如果不是由该事件引起)。这方面的文档稍微详细一点:

This method is invoked when the Cocoa Touch framework receives a system interruption requiring cancellation of the touch event; for this, it generates a UITouch object with a phase of UITouchPhaseCancel. The interruption is something that might cause the application to be no longer active or the view to be removed from the window

一个场景是屏幕旋转。如果您在按住按钮的同时旋转屏幕,您将获得触摸取消事件。