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