UIApplication運行著一個runloop在接受觸摸事件,當接收到觸摸后將事件交給keywindow去處理,然后通過一系列的事件傳遞找到合適的view。
hitTest方法的內部流程
1,判斷自己能否接收事件。
2,判斷下點在不在當前視圖 pointInside: withEvent: ,如果在,繼續(xù)下一步。
3,從后往前遍歷自己的子控件。
4,如果沒有比自己合適的子控件,那么這個最合適的View就是自己返回self。
然后會調用touchesBegan方法,向上傳遞給 響應者,這就是響應者鏈條
響應者鏈條
響應者鏈條:由多個響應者一起形成的鏈條
作用:能清楚的看到每個響應者的聯系,同時可以讓一個事件多個對象處理。
響應者對象:能處理事件的對象。
如何判斷上一個響應者:
如果view是控制器view,那么控制器就是上一個響應者,否則父控件就是上一個響應者,如果一直找不到響應者會最終會到AppDelegate,如果AppDelegate內沒有實現該事件方法,將會崩潰。