事件的分发和传递
- 当iOS 程序中发生触摸事件后,系统会将事件加入到UIApplication管理的一个任务队列中
- UIApplication将处于任务队列最前端的事件向下分发。即UIWindow
- UIWindow将事件向下分发,即UIView
- UIView 首先看自己是否能处理事件,触摸点是否在自己身上。如果能,那么继续寻找子视图
- 遍历子控件,重复以上两步
- 如果没有找到,那么自己就是事件处理者
- 如果自己不能处理,那么不做任何事情
- 该事件被废弃
其中UIView 不接受事件处理的情况主要有一下三种:alph< 0.01 userinteractionEnable = NO hidden = yes
这个从父控件到子控件寻找处理时间最合适的view过程,如果父视图不接受事件处理,则子视图也不能接收事件
响应者链:
响应链是从最合适的view开始传递,处理事件传递给下一个响应者,响应者链的传递方向是事件传递的反方向,如果所有响应者都不处理事件,则事件被丢弃。