View事件傳遞

參考文章:http://xiangwangfeng.com/2011/09/26/ios%E7%A8%8B%E5%BA%8F%E4%B9%8B%E4%BA%8B%E4%BB%B6%E5%A4%84%E7%90%86%E6%B5%81%E7%A8%8B/

參考文章:http://blog.sina.com.cn/s/blog_884e78b20101g8g3.html

一.事件類型

        在iOS系統中,一共有三種形式的事件:觸摸事件(Touch Event),運動事件(Motion Event)和遠端控制事件(Remote-control Event)。顧名思義,觸摸事件就是當用戶觸摸屏幕時發生的事件,而運動事件是用戶移動設備時發生的事件:加速計,重力感應。遠端控制事件可能比較陌生:如通過耳機進行控制iOS設備聲音等都屬於遠端控制事件—-下面不展開說,因爲和主題無關,詳細的內容可以參考:《Remote Control of Multimedia》

二.事件發生時,查找響應者

1.Touch發生時,外部的驅動傳遞給當前處於active狀態的UIApplication,然後由這個Application做處理;

2.Applcation內部的runloop接受到事件之後通常會先找出誰應該是事件的響應者:

3.superView通過-hitTest: withEvent:遍歷每個子視圖,-hitTest: withEvent:通過pointInside:withEvent: 判斷事件是否在子視圖內,若子視圖返回yes則遍歷該子視圖,否則忽略。


4.注,如果一個superView有多個sonView,會從距用戶最近的視圖開始遍歷,如果確定了響應者,則不再遍歷

三,確定響應者之後,開始處理事件

1.確定相應事件的view後,看該view是否處理該事件,並且決定是否向下傳,如果決定繼續向下傳,則傳到superView,依次類推

2。可以在- touchesXXXX:withEvent:方法中處理



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