iOS響應者鏈

參考好文

iOS開發-事件傳遞響應鏈,用運行時分析

iOS事件傳遞:響應者鏈[譯]

http://www.lxweimin.com/p/ef83a798121c
圖都是搬過來總結的

總結

  1. 操作系統會把一系列單擊事件包裝成UITouch和UIEvent形式的實例。
事件響應鏈

圖中的都是UIResponder的子類對象。
UIResponer提供四個用戶點擊的回調方法


屏幕快照 2016-08-12 下午3.53.58.png

UIVIew中的兩個方法

- (nullable UIView *)hitTest:(CGPoint)point withEvent:(nullable UIEvent *)event;   // recursively calls -pointInside:withEvent:. point is in the receiver's coordinate system
- (BOOL)pointInside:(CGPoint)point withEvent:(nullable UIEvent *)event;   // default returns YES if point is in bounds

上面四個方法 + 2個方法有什么聯系呢

當一個點擊事件發生時,從UIApplication開始調用pointInSide: WithEvent:直到最低層的UIVIew,若返回YES,則調用hitTest: withEvent:,壓入response棧,遍歷到最低層UIView后,開始出棧 (使用nextResponder),每pop一個檢測是否響應事件,以此下去,直到事件得到了處理或者到達AppDelegate后依舊未響應,事件被摒棄為止

屏幕快照 2016-08-12 下午4.20.33.png
屏幕快照 2016-08-12 下午4.20.53.png

響應者鏈是由一系列響應者連成的鏈

  • 很多類型的事件的傳遞都依賴于響應者鏈。響應者鏈是一系列連接在一起的響應者對象。它從第一響應者(棧頂的view)開始,以application
    對象結束。如果第一響應者不能處理這個事件,它會把這個事件沿著這個響應者鏈傳遞到下一個響應者。
  • 一個響應者對象是一個能響應并能處理事件的對象。UIResponder類是所有響應者的父類,它定義了事件處理和常見響應者行為的通用編程接口。UIApplication,UIViewController以及UIView類的實例對象都是響應者,這表明,所有視圖和絕大多數主控制器都是響應者。需要注意的是核心動畫的圖層對象不是響應者
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 一、響應者鏈(Responder Chain) 先來說說響應者對象(Responder Object),顧名思義,...
    像小強一樣活著閱讀 6,889評論 8 76
  • 好奇觸摸事件是如何從屏幕轉移到APP內的?困惑于Cell怎么突然不能點擊了?糾結于如何實現這個奇葩響應需求?亦或是...
    Lotheve閱讀 57,983評論 51 603
  • 在iOS開發中經常會涉及到觸摸事件。本想自己總結一下,但是遇到了這篇文章,感覺總結的已經很到位,特此轉載。作者:L...
    WQ_UESTC閱讀 6,114評論 4 26
  • 響應者鏈顧名思義就是由一系列能夠響應事件的響應者對象組成的一個層式結構。我們把具有響應和處理事件能力的對象稱為響應...
    Nicole__Zhang閱讀 386評論 0 2
  • 一篇搞定事件傳遞、響應者鏈條、hitTest和pointInside的使用發生觸摸事件后,系統會將該事件加入到一個...
    克魯德李閱讀 1,138評論 0 1