在如下圖所示的檢視層次中,假設使用者觸控的時e檢視,在呼叫hittest:withevent:
時
首先對a進行測試,返回yes
,繼續對b
和c
進行測試
對b
測試返回no
,不再繼續往下測試,轉而對c
進行測試
對c
測試返回yes
,繼續對d
和e
進行測試
對d
測試返回no
,不再繼續往下測試,轉而對e
進行測試
對e
測試返回yes
,由於e
是最低一級檢視,所以hittest:withevent:
返回檢視e
在呼叫hittest:withevent:
時會傳入兩個引數:乙個gcpoint
和乙個uievent
,gcpoint
表示手指觸控螢幕時的座標,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
進行接收識別並交由uigesturerecognozer
的target
進行處理
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
,否則就是它的父檢視
uiviewcontroller
的nextresponder
是它的view
的父檢視
根檢視或根試圖控制器的nextresponder
是uiwindow
因為響應者鏈中的所有的物件都是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 檢測的...