當用戶點擊了屏幕中的button,事件是如何響應的呢,為什么點擊其他區(qū)域沒有事件響應呢磨隘?事件又是怎么觸發(fā)的呢价认?
屏幕快照 2017-05-04 下午3.58.28.png
首先當用戶點擊button后嗅定,操作系統(tǒng)監(jiān)聽到用戶點擊了某點的位置,將該消息傳遞給當前APP的運行循環(huán)
在程序內部的流程圖大概如下
運行循環(huán) .png
1.當前的運行循環(huán)監(jiān)聽到屏幕上有一點被觸摸用踩,運行循環(huán)將該消息傳遞給UIApplication渠退,查找觸摸對象
2.UIApplication將消息傳遞給UIWindow忙迁,查找觸摸對象
3.UIWindow將消息傳遞給根控制器
4.根控制器將消息傳遞給self.view
5.self.view會查找所有的子視圖,判斷觸摸的點在哪個子控件內智什,然后將消息傳遞給子控件
6.子控件查找該觸摸點在哪個控件內动漾,查找到button后,button荠锭,button之下沒有了子控件旱眯,那么該button就是第一事件響應者,觸摸的對象就是button
7.button調用touchBegin方法证九,將消息發(fā)送給子控件删豺,
子控件在調用touchBegin方法,將消息發(fā)送給self.view
以此類推一直傳遞到運行循環(huán)
8.運行循環(huán)就知道愧怜,點擊用戶點擊的是button按鈕呀页,就會去查找button是否注冊了事件,注冊了就會調用該事件拥坛,沒有注冊蓬蝶,該消息會被丟棄。
事件傳遞設計的方法
1.從上到下查找對象用 hitTest方法
2.事件響應猜惋,用touchXXX方法