事件傳遞:響應者鏈
對於觸控事件來說, window 會傳到 發生觸控的view,被稱之為hit-test view。
此過程叫 hit-testing。
對於手勢和遠端控制,這個第一響應被發到 first responder.
最終響應者鏈要找到處理事件的物件。規則如下。
1 hit_testing (檢測的過程實際上是自上而下的)
1 此觸控被檢測抖到在a的邊界內,所以繼續檢測b和c。
2 同樣的道理,繼續檢測c的子類d和e。
3 最後排除了d,檢測e。
view e已經是最低層的view,所以它使hit-test找到的物件。
引數為cgpoint 和 uievent。
hittest:withevent:
為檢驗的,先檢驗自己然後再檢驗subview,所以觸控點是必須在superview然後同時在view才會被傳下來,如果都沒有在superview檢測到是不會被傳下來的。這種情況適用於cliptobounds的情況。
然後就是nextresponder了。響應者鏈的組成部分是responder, responder的
nextresponder方法決定了傳遞的規則,然後蘋果公布的規則是這樣子的
參考的路徑
按照文件的推論
1 任何乙個view的
-(bool)pointinside:(cgpoint)point withevent:(uievent *)event
都會導致其的sperview成為 hittestview
2/**
* 傳送乙個路由器訊息, 對
eventname
感興趣的
uiresponsder
可以對訊息進行處理 *
* @param eventname
發生的事件名稱
* @param userinfo
傳遞訊息時
, 攜帶的資料
, 資料傳遞過程中
, 會有新的資料新增 *
*/- (void)routereventwithname:(nsstring *)eventname userinfo:(nsdictionary *)userinfo;
@implementation uiresponder (router)
- (void)routereventwithname:(nsstring *)eventname userinfo:(nsdictionary *)userinfo
@end
. message. if necessary, an object can send itself this message.
iOS 響應者鏈,事件的傳遞
先將事件物件由上往下傳遞 由父控制項傳遞給子控制項 找到最合適的控制項來處理這個事件。呼叫最合適控制項的touches 方法 如果呼叫了 super touches 就會將事件順著響應者鏈條往上傳遞,傳遞給上乙個響應者 接著就會呼叫上乙個響應者的touches 方法 如果當前這個view是控制器的v...
iOS 響應者鏈,事件的傳遞
觸控事件 對於觸控事件,window物件會嘗試著首先將事件傳遞給觸控事件發生點得view。這個view被視為 命中測試view hit test view 尋找 命中測試view 的過程被稱作 命中測試 關於 命中測試 會在下面的命中測試返回觸控事件發生點的view有詳情描述。手勢和遠端控制事件 對...
iOS事件傳遞和事件響應者鏈 20170810
區別 事件的傳遞和響應的區別 事件的傳遞是從上到下 父控制項到子控制項 事件的響應是從下到上 順著響應者鏈條向上傳遞 子控制項到父控制項。引出 當我們手指觸控螢幕的時候,ios系統是怎麼找到對應的圖層,並響應手勢的呢?事件的產生 主視窗會在檢視層次結構中找到乙個最合適的檢視來處理觸控事件,這也是整個...