天天看点

iOS事件传递与响应链

iOS事件响应都是基于UIResponder,UIApplication、UIWindow、UIViewcontroller都是继承自UIResponder,CALayer不是继承自UIResponder的,所以它无法响应事件,只负责UIView的界面显示和渲染。

事件传递的过程:

用户点击手机屏幕 -> 点击事件加入到UIApplication任务队列中 -> UIWindow -> UIViewController(若有) -> UIView -> SubView - > 直到找到可以处理该事件的View,若找不到则废弃。

事件响应的过程:

响应链是从最合适的view开始传递,处理事件传递给下一个响应者,响应者链的传递方法是事件传递的反方法,如果所有响应者都不处理事件,则事件被丢弃。我们通常用响应者链来获取上几级响应者,方法是UIResponder的nextResponder方法。