iOS事件傳遞機制

2022-09-01 21:09:15 字數 1672 閱讀 8183

我的理解:

第一步:

hit-testing找到:hit-test view/window,儲存在**呢?

找到響應者鏈/響應者鏈中的view鏈,儲存在**呢?

第二步:

第乙個touch:

(1)touch 初始化,沿著鏈條找哪些要響應 event?(不知道儲存在**)

(2)沿著鏈條找哪些要響應 touch,儲存在 touch 的 gestures 中

手指移動:

(3)遍歷 touch 中 gestures, 呼叫 touchmoved

手指抬起:

(4)遍歷 touch 中 gestures, 呼叫 touchend

(5)在響應 touch 的過程中,有些 touch 中儲存的 gesture 有些會被移除掉

(6)touch 和 有可能的 gestures 被儲存在 手勢環境中

第三步:

第二個touch:

。。。。

手勢被識別

demo1:

單擊事件:

----- 手指點下 -----

// 探測階段

(1)hit-testing

// 手勢處理階段

(2)手勢**:是否接收 event (呼叫順序按照檢視層級)

(3)手勢**:是否接收 touch

(4)接收的話,呼叫手勢的 touchbegan

// view 處理階段

(5)呼叫 view 的 touchbegan

----- 手指放開 -----

(6)手勢的 hit-test view 是否 begin(hit-test view 被 touch 儲存嗎?)

(7)手勢**:手勢被識別,是否 begin,不begin就失敗了

(8)呼叫手勢的 touchend

(9)被識別的話,呼叫 view 的 touchcancel,沒有被識別的話,呼叫 view 的 touchend

demo2:

雙擊事件

----- 手指點下 -----

// 探測階段

(1)hit-testing

// 手勢處理階段

(2)手勢**:是否接收 event (呼叫順序按照檢視層級)

(3)手勢**:是否接收 touch

(4)接收的話,呼叫手勢的 touchbegan

// view 處理階段

(5)呼叫 view 的 touchbegan

----- 手指放開 -----(這裡沒有呼叫 view 的 touchend 耶)

(6)呼叫手勢的 touchend

----- 手指點下 -----(也沒有呼叫 view 的 touch 方法)

(7)手勢**:是否接收 touch

(8)呼叫手勢的 touchbegan

----- 手指放開 -----

(9)手勢的 hit-test view 是否 begin(hit-test view 被 touch 儲存嗎?)

(10)手勢**:手勢被識別,是否 begin,不begin就失敗了

(11)呼叫手勢的 touchend

(12)呼叫 selector

(13)呼叫 view 的 touchcancel

疑問:當兩個手勢都被觸發了,並且不可同時響應時,系統是通過什麼判斷呼叫哪個selector的? 

IOS和OSX事件傳遞機制

文章開頭說到有ios三種event型別,事件傳遞中uiwindow會根據不同的event,用不同的方式尋找initial object,initial object決定於當前的事件型別。比如touch event,uiwindow會首先試著把事件傳遞給事件發生的那個view,就是下文要說的hit t...

iOS事件的傳遞和響應機制

1.touch events 觸控事件 2.motion events 運動事件 3.remote events 遠端事件 4.press events 按壓事件 1.事件產生和傳遞 2.找到合適的view處理 3.處理事件或者捨棄 這裡主要是說觸控事件。響應者物件 可以處理事件的物件,即uires...

iOS 事件傳遞

合適的view的標準 1 能接收觸控事件。2 觸控點在自己身上。第2點很容易明白,但是第1點有點模糊,乙個view怎樣才能接收觸控事件呢,其實只要知道了不能接收事件的情況,剩下的就是能接收事件的情況了。滿足以下3點之一,view不能接收事件 a.userinte nceenable no b.hid...