ios中事件的響應鏈(Responder chain)和傳遞鏈


事件的響應鏈涉及到的一些概念

  • UIResponder類,是UIKIT中一個用於處理事件響應的基類。窗又上的所有事件觸發,都由該類響應(即事件處理入又)。所以,窗又上的View及控制器都是 派生於該類的,例如UIView、UIViewController等。

  • 調用UIResponder類提供的方法或屬性,我們就可以捕捉到窗又上的所有響應 事件,並進行處理。

  • 響應者鏈條是由多個響應者對象連接起來的鏈條,其中響應者對象是能處理事 件的對象,所有的View和ViewController都是響應者對象,利用響應者鏈條能 讓多個控件處理同一個觸摸事件. 

如上圖,響應者鏈有以下特點:

響應者鏈通常是由 initial view 開始;

  • UIView 的 nextResponder 它的 superview;如果 UIView 已經是其所在的 UIViewController 的 top view,那么 UIView 的 nextResponder 就是 UIViewController;

  • UIViewController 如果有 Super ViewController,那么它的 nextResponder 為其 Super ViewController 最表層的 View;如果沒有,那么它的 nextResponder 就是 UIWindow;

  •  UIWindow 的 contentView 指向 UIApplication,將其作為 nextResponder;

  •  UIApplication 是 個響應者鏈的終點,它的 nextResponder 指向nil,整個

    responder chain 結束。 

Hit-Test View 與 Hit-Testing 

 

假設用戶觸摸了上圖的 View E 區域,那么 iOS 將會按下面的順序反復檢測 subview 來尋找 Hit-Test View

  1. 觸摸區域在視圖 A 內,所以檢測視圖 A 的 subview B 和 C;

  2. 觸摸區域不在視圖 B 內,但是在視圖 C 內,所以檢查視圖 C 的 subview D 和 E;

  3. 觸摸區域不在視圖 D 內,在視圖 E 中;

視圖 E 在整個視圖體系中是 lowest view,所以視圖 E 就是 Hit-Test View 。 

事件的鏈有兩條:事件的響應鏈;Hit-Testing 時事件的傳遞鏈。

  •  響應鏈:由離 戶最近的view向系統傳遞。 initial view –> super view –> .....–> view controller –> window –> Application –> AppDelegate

  •  Hit-Testing 鏈:由系統向離 戶最近的view傳遞。 UIKit –> active app's event queue –> window –> root view –>......–>lowest view 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM