響應者鏈條

2022-09-11 15:27:27 字數 1320 閱讀 6687

所謂的響應者鏈條簡單的說:

就是一級一級的查詢處理該事件的物件.當查詢到合適的物件,則執行該任務.

它的目的: 主迴圈捕捉到事件,找到最佳合適處理該事件的響應者

對於ios裝置使用者來說,他們操作裝置的方式主要有三種:觸控螢幕、晃動裝置、通過遙控設施控制裝置。對應的事件型別有以下三種:

1、觸屏事件(touch event)

2、運動事件(motion event)

3、遠端控制事件(remote-control event)

響應者物件(responder object)指的是有響應和處理事件能力的物件。響應者鏈就是由一系列的響應者物件構成的乙個層次結構。

uiwindow例項物件會首先在它的內容檢視上呼叫hittest:withevent:,此方法會在其檢視層級結構中的每個檢視上呼叫pointinside:withevent:(該方法用來判斷點選事件發生的位置是否處於當前檢視範圍內,以確定使用者是不是點選了當前檢視),如果pointinside:withevent:返回yes,則繼續逐級呼叫,直到找到touch操作發生的位置,這個檢視也就是要找的hit-test view。

hittest:withevent:方法的處理流程如下:

首先呼叫當前檢視的pointinside:withevent:方法判斷觸控點是否在當前檢視內;

若返回no,則hittest:withevent:返回nil;

若返回yes,則向當前檢視的所有子檢視(subviews)傳送hittest:withevent:訊息,所有子檢視的遍歷順序是從最頂層檢視一直到到最底層檢視,即從subviews陣列的末尾向前遍歷,直到有子檢視返回非空物件或者全部子檢視遍歷完畢;

若第一次有子檢視返回非空物件,則hittest:withevent:方法返回此物件,處理結束;

如所有子檢視都返回非,則hittest:withevent:方法返回自身(self)。

說明:2、hittest:withevent:方法將會忽略隱藏(hidden=yes)的檢視,禁止使用者操作(userinteractionenabled=yes)的檢視,以及alpha級別小於0.01(alpha<0.01)的檢視。如果乙個子檢視的區域超過父檢視的bound區域(父檢視的clipstobounds 屬性為no,這樣超過父檢視bound區域的子檢視內容也會顯示),那麼正常情況下對子檢視在父檢視之外區域的觸控操作不會被識別,因為父檢視的pointinside:withevent:方法會返回no,這樣就不會繼續向下遍歷子檢視了。當然,也可以重寫pointinside:withevent:方法來處理這種情況。

3、我們可以重寫hittest:withevent:來達到某些特定的目的,當然實際應用中很少用到這些。

響應者鏈條

發生觸控事件後,系統佇列 不接收使用者互動 userinteractionenabled no隱藏 hidden yes透明 alpha 0.0 0.01 主視窗會在檢視層次結構中 找到乙個最合適的檢視來處理觸控事件 但是這僅僅是整個事件處理過程的第一步 找到合適的檢視控制項後,就會呼叫檢視控制項的...

IOS 響應者鏈條

對於ios裝置使用者來說,他們操作裝置的方式主要有三種 觸控螢幕 晃動裝置 通過遙控設施控制裝置。對應的事件型別有以下三種 1 觸屏事件 touch event 2 運動事件 motion event 3 遠端控制事件 remote control event 響應者物件 responder obj...

事件處理響應者鏈條

mj 事件的完整處理過程 1.先將事件物件由上往下傳遞 由父控制項傳遞給子控制項 找到最合適的控制項來處理這個事件 2.呼叫最合適控制項的touches.方法 3.如果touches.裡面呼叫了 super touches.方法,則順著響應者鏈條往上找,找到上乙個響應者 4.執行上乙個響應者的tou...