UIApplication运行着一个runloop在接受触摸事件,当接收到触摸后将事件交给keywindow去处理,然后通过一系列的事件传递找到合适的view。
hitTest方法的内部流程
1,判断自己能否接收事件。
2,判断下点在不在当前视图 pointInside: withEvent: ,如果在,继续下一步。
3,从后往前遍历自己的子控件。
4,如果没有比自己合适的子控件,那么这个最合适的View就是自己返回self。
然后会调用touchesBegan方法,向上传递给 响应者,这就是响应者链条
响应者链条
响应者链条:由多个响应者一起形成的链条
作用:能清楚的看到每个响应者的联系,同时可以让一个事件多个对象处理。
响应者对象:能处理事件的对象。
如何判断上一个响应者:
如果view是控制器view,那么控制器就是上一个响应者,否则父控件就是上一个响应者,如果一直找不到响应者会最终会到AppDelegate,如果AppDelegate内没有实现该事件方法,将会崩溃。
网友评论