IOS事件傳遞和響應

1、觸摸屏幕產生觸摸事件

觸摸屏幕產生觸摸事件后,觸摸事件會被添加到由UIApplication管理的事件隊列中(之所以不是棧是因為棧是先進后出而隊列是先進先出)

2、事件傳遞

2.1、UIApplication從事件隊列中取出最前的事件傳遞給keyWindow

2.2、keyWindow在視圖層次結構尋找最適合響應的視圖來處理事件

2.3、最合適的view會調用自己的touches方法處理事件

備注:事件傳遞通過hitTest進行,可以在hitTest方法中處理,是超出父視圖frame的視圖響應事件

3、事件響應

3.1、如果最適合的view能夠響應事件,則響應事件,否則將事件傳遞給給上級視圖。

3.2、如果上級視圖不能響應,繼續向上級視圖傳遞。一直傳遞到ViewController,如果ViewController的view不能響應事件,則繼續傳遞給父控制器的view,一直傳遞到window,如果Window不能響應則傳遞給UIApplication,如果application還是不能響應則丟棄該事件。

3.3、在事件響應中如果視圖實現了touches則響應,否則調用supertouches向上傳遞

總結

事件的傳遞是從上到下(父控件到子控件),事件的響應是從下到上(順著響應者鏈條向上傳遞:子控件到父控件。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容