14.1.3 事件传递
2025年09月26日
14.1.3 事件传递
当产生了触摸事件之后,系统会按特定的方式将触摸事件进行传递,直到有视图或者窗口可以响应这个事件。当用户触摸设备屏幕时,系统会将其封装在一个UIEvent实例里,然后放入当前应用程序的事件处理队列中。
一般情况下,事件会先交给应用的焦点窗口,然后由这个UIWindow的实例将这个事件传递给它的第一响应者进行处理。应用通过调用hitTest(_:with:)方法去寻找事件的第一响应者,此方法会递归调用视图层级中子视图的hitTest(_:with:)方法,最终确认由谁来响应这个事件。触摸对象的整个生命周期都会和已确认的视图绑定,即使触摸移动到该视图所能响应的区域之外。
UIApplication实例和每个UIWindow实例都会调用sendEvent(_:)方法来分发事件。由于这些方法是事件进入应用程序的入口,所以可以通过继承UIApplication或UIWindow类,在子类中重载其sendEvent(_:)方法,实现对事件的监控或拦截一些特殊的事件,但一般情况下我们不必这么做。