iOS 中事件的響應鏈和傳遞鏈

2022-09-20 20:39:08 字數 1389 閱讀 5368

ios事件鏈有兩條:事件的響應鏈;hit-testing事件的傳遞鏈

在ios中只有繼承uiresponder的物件才能夠接收並處理事件,uiresponder是所有響應物件的基類,在uiresponder類中定義了處理上述各種事件的介面。我們熟悉的uiapplication、uiviewcontroller、uiwindow和所有繼承自uiview的uikit類都直接或間接的繼承自uiresponder,所以它們的例項都是可以構成響應者鏈的響應者物件,首先我們通過一張圖來簡單了解一下事件的傳遞以及響應

1.傳遞鏈

事件傳遞的兩個核心方法

- (nullable uiview *)hittest:(cvtvpogygpoint)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 re程式設計客棧turns yes if point is in bounds

第乙個方法返回的是乙個uiview,是用來尋找最終哪乙個檢視來響應這個事件

第二個方法是用來判斷某乙個點選的位置是否在檢視範圍內,如果在就返回yes

其中uiview不接受事件處理的情況有

1. alpha <0.01

2. userinteractionenabled = no

3. hidden = yes

事件傳遞的流程圖

流程描述

2.響應鏈

響應者鏈流程圖

響應者鏈的事件傳遞過程總結如下

例項場景

在乙個方形按鈕中點選中間的圓形區域有效,而點選四角無效

核心思想是在pointinside: withevent:方法中修改對應的區域

- (uiview *)hittest:(cgpoint)point withevent:(uievent *)event

//判斷當前檢視是否在點選範圍內

if ([self pointinside:point withevent:event]) ];

//返回當前的檢視物件

return hit?hit:self;

}else

}// 該方法判斷觸控點是否在控制項身上,是則返回yes,否則返回no,point引數必須是方法呼叫者的座標系

- (bool)pointinside:(cgpoint)point withevent:(uievent *)event

else}總結

本文標題: ios 中事件的響應鏈和傳遞鏈

本文位址:

iOS事件傳遞 響應者鏈

事件傳遞 響應者鏈 對於觸控事件來說,window 會傳到 發生觸控的view,被稱之為hit test view。此過程叫 hit testing。對於手勢和遠端控制,這個第一響應被發到 first responder.最終響應者鏈要找到處理事件的物件。規則如下。1 hit testing 檢測的...

iOS 響應者鏈,事件的傳遞

先將事件物件由上往下傳遞 由父控制項傳遞給子控制項 找到最合適的控制項來處理這個事件。呼叫最合適控制項的touches 方法 如果呼叫了 super touches 就會將事件順著響應者鏈條往上傳遞,傳遞給上乙個響應者 接著就會呼叫上乙個響應者的touches 方法 如果當前這個view是控制器的v...

iOS 響應者鏈,事件的傳遞

觸控事件 對於觸控事件,window物件會嘗試著首先將事件傳遞給觸控事件發生點得view。這個view被視為 命中測試view hit test view 尋找 命中測試view 的過程被稱作 命中測試 關於 命中測試 會在下面的命中測試返回觸控事件發生點的view有詳情描述。手勢和遠端控制事件 對...