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時還沒有能夠響應事件,則拋棄事件不做處理,這就是響應者鏈之間的傳遞過程,語言表達能力不是很好,但仔細理解一下就想通了