ios觸控事件響應鏈個人總結

2021-07-04 22:59:40 字數 2892 閱讀 4834

在如下圖所示的檢視層次中,假設使用者觸控的時e檢視,在呼叫hittest:withevent:

首先對a進行測試,返回yes,繼續對bc進行測試

b測試返回no,不再繼續往下測試,轉而對c進行測試

c測試返回yes,繼續對de進行測試

d測試返回no,不再繼續往下測試,轉而對e進行測試

e測試返回yes,由於e是最低一級檢視,所以hittest:withevent:返回檢視e

在呼叫hittest:withevent:時會傳入兩個引數:乙個gcpoint和乙個uieventgcpoint表示手指觸控螢幕時的座標,uievent包裝了此次觸控的觸控事件。hittest:withevent:執行時會首先對自己呼叫pointinside:withevent:來測試gcpoint是否在自己的bounds範圍內,如果在,返回yes並繼續對自己的子檢視遞迴呼叫hittest,不在返回no並且hittest:withevent:返回nil

一旦hittest:withevent:返回nil的話就不會再繼續對其子檢視呼叫hittest:withevent

通過hittest:withevent:找到的hit-test view將有第一次機會去處理觸控事件,如果不能夠處理的話,將會把事件沿著響應者鏈往下傳遞來找到能夠處理事件的物件。

如果在uiview上附加了uigesturerecognozer可能會使uiwindow延遲或取消向uiview傳送事件而由uigesturerecognozer進行接收識別並交由uigesturerecognozertarget進行處理

響應者鏈中第乙個有機會處理事件的物件叫做first responder(第一響應者)。

first responder通常是乙個uiview物件。

觸控事件中,frist responder通常是hit-test view

如果要讓乙個物件成為第一響應者,要做到以下兩件事情:

重寫canbecomefirstresponder方法並返回yes呼叫becomefirstresponder方法

uiresponder定義了以下四個方法:

- (void)touchesbegan:(nsset *)touches withevent:(uievent *)event

- (void)touchesmoved:(nsset *)touches withevent:(uievent *)event

- (void)touchesended:(nsset *)touches withevent:(uievent *)event

- (void)touchescancelled:(nsset *)touches withevent:(uievent *)event

並且一般來說

如果乙個uiview有它自己的uiviewcontroller的話那麼它的nextresponder就是它的uiviewcontroller,否則就是它的父檢視

uiviewcontrollernextresponder是它的view的父檢視

根檢視或根試圖控制器的nextresponderuiwindow

因為響應者鏈中的所有的物件都是uiresponder的子類,因此,當某個事件無法處理並且要交給下乙個響應物件處理的時候應該呼叫

[super touches***:touches withevent:event]

;

而不是

[self.nextresponder touches***:touches withevent:event]

;

因為呼叫後者可能會漏掉父類對事件的一些其他的處理。

大致的事件傳遞流程可以參考下圖

iOS開發 響應者鏈觸控事件 二

不接收使用者互動 userinteractionenabled no 隱藏hidden yes 透明alpha 0.0 0.01 主視窗會在檢視層次結構中找到乙個最合適的檢視來處理觸控事件,但是這僅僅是整個事件處理過程的第一步 找到合適的檢視控制項後,就會呼叫檢視控制項的touches方法來作具體的...

(6)響應觸控事件

讓物件按著預設的程式移動比如旋轉三角形,看起來是有些亮點的,但是如果你想讓使用者和你的opengl es圖形進行互動,該如何做呢?使你的opengl es程式可以觸控互動的關鍵是,實現glsu ceview的過載方法ontouchevent 讓它可以監聽觸控事件。這篇文章將向你展示如何監聽觸控事件讓...

iOS事件傳遞 響應者鏈

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