首页 理论教育 事件响应过程:从发生到处理

事件响应过程:从发生到处理

时间:2023-06-23 理论教育 版权反馈
【摘要】:UIResponder是所有可以响应事件类的基类。应用程序通过这些响应实例接收和处理事件,响应者接收原始事件数据,并且必须处理事件或将其转发给另一个响应者。当应用收到事件时,UIKit会自动将该事件定向到最合适的响应者对象,称为第一响应者。未处理的事件从响应者传递到活跃着的响应者链中,这是应用程序响应者对象的动态配置。图14.1.2响应者链示意图UIKit使用基于视图的hitTest方法来确定触摸事件发生的位置。

事件响应过程:从发生到处理

UIResponder是所有可以响应事件类的基类。UIKit提供的UIApplication、UIView和UIViewController都是继承自UIResponder,从这些类派生出来的类也间接地继承了UIResponder。应用程序通过这些响应实例接收和处理事件,响应者接收原始事件数据,并且必须处理事件或将其转发给另一个响应者。当应用收到事件时,UIKit会自动将该事件定向到最合适的响应者对象,称为第一响应者。

响应者链是一系列响应者对象,它们串联在一起。响应者实例可以将处理事件的责任传递给其他更高级别的对象。随着应用程序不断寻找能够处理事件的对象,事件就在响应者链中向上传递。响应者链寻找响应者的顺序如下:

1.如果视图是视图控制器的根视图,则下一个响应者是视图控制器,否则是它的父视图;

2.如果视图控制器是当前的响应者,那么下一个响应者是UIWindow的实例;

3.如果窗口是当前的响应者,那么下一个响应者将传递给UIApplication实例;(www.xing528.com)

4.如果应用是当前的响应者,那么下一个响应者将传递给UIApplicationDelegate实例,前提是这个应用委托的类是一个UIResponder的子类,并且不是UIView的子类。

未处理的事件从响应者传递到活跃着的响应者链中,这是应用程序响应者对象的动态配置。如图14.1.2所示,应用程序中的响应者包含界面上的展示标签、文本输入框按钮和两个背景视图,该图还展示了事件如何在响应者链中从一个响应者移动到下一个响应者。

图14.1.2 响应者链示意图

UIKit使用基于视图的hitTest(_: with :)方法来确定触摸事件发生的位置。具体来说,UIKit将触摸位置与视图层级结构中视图实例的边界通过hitTest(_: with :)方法进行比较。这里需要注意,如果触摸位置在视图边界之外,则hitTest(_: with :)方法会忽略该视图及其所有子视图,因此当视图的clipsToBounds属性为false时,即使它们恰好包含触摸也不会返回该视图边界之外的子视图。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈