What is UIControlEventTouchCancel?

☆樱花仙子☆ 提交于 2019-12-24 17:19:50

问题


When the user taps and holds down a UIButton in my app, after a while a UIControlEventTouchCancel event is fired. The Apple documentation for UIControl doesn't have any detailed explanation about this event. Why is it triggered? What is it used for?

[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];

回答1:


According to the documentation, a UIControlEventTouchCancel event is due to:

A system event canceling the current touches for the control.

Therefore, it's not due to user input that the touch has ended, it's due to a system event (such as a low memory warning, or the app moving into the background). I have no idea why you are able to trigger it from simply pressing and holding on the button.

I'm pretty sure it's a similar (if not caused by the) event to the UIResponder's touchesCancelled:withEvent: event. The documentation on this is slightly more detailed:

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




回答2:


One scenario is the screen rotation. If you rotate your screen while holding down the button you will get a touch cancel event.



来源:https://stackoverflow.com/questions/34931183/what-is-uicontroleventtouchcancel

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!