事件響應者鏈的理解

1.一個點擊事件發生時系統會先判斷事件發生在哪些視圖上,這個過程是從父視圖向子視圖方向的遞歸檢查,以下圖爲例解釋一下:



如果點擊放生在E:

(1)點擊區域發生在A視圖,所以檢查他的子視圖B和C

(2)點擊區域發生在C視圖,所以終止B視圖分支的檢查,繼續檢查C視圖的分支

(3)點擊區域發生在E視圖,所以終止D視圖分支的檢查,繼續檢查E視圖的分支

(4)由於E視圖沒有子視圖,所以E分支檢查終止,繼而整個檢查過程結束

注:個人理解在檢查這些視圖及子視圖的過程中,系統回創建一個棧,檢查時當點擊點在該視圖則將視圖添加到棧中,直到檢查結束


2.上面完成後在理解事件相應者鏈就好理解了

如果A視圖是視圖控制器的view,那麼就可以在執行上面的操作前將application和window,加入到棧中,執行完上面的操作後棧裏的對象由棧底到棧頂得順序是

application  -->  window  -->  view controller  -->  A --> C -->  E,這就形成的響應者鏈,系統會以從E到application的順序檢查有沒有可以接受並處理事件的對象,如果有則終止事件的傳遞並處理事件操作,如果沒有一直傳遞下去,如果到application時還沒有能夠響應事件,則拋棄事件不做處理,這就是響應者鏈之間的傳遞過程,語言表達能力不是很好,但仔細理解一下就想通了





發佈了34 篇原創文章 · 獲贊 4 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章