標籤:cat 開始 roo 概念 ... iap root ios 視圖
事件的響應鏈涉及到的一些概念
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
觸摸地區在視圖 A 內,所以檢測視圖 A 的 subview B 和 C;
觸摸地區不在視圖 B 內,但是在視圖 C 內,所以檢查視圖 C 的 subview D 和 E;
觸摸地區不在視圖 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
ios中事件的響應鏈(Responder chain)和傳遞鏈