主視窗會在檢視層次結構中,通過hittest方法尋找最合適的檢視view來處理觸控事件,事件處理的第一步
找到合適的檢視view控制項之後,就會呼叫該控制項的touches方法來處理相應的事件
事件的傳遞:觸控事件的傳遞是從父控制項傳遞到子控制項的,以下圖為例,事件的傳遞過程如下:
點選藍色
點選來黃色
注意:如果父控制項不能接收觸控事件,那麼子控制項就不可能接收到觸控事件
如何找到最合適的控制項來處理事件:
尋找最合適控制項**的底層實現:
1事件處理的過程://觸控事件發生時尋找最合適的view,系統呼叫 hittest: withevent:方法找到最合適的view2//
當前view發生觸控事件就會呼叫該方法3//
hittest: withevent:方法的底層實現
4 - (uiview*)hittest:(cgpoint)point withevent:(uievent *)event9//
判斷當前view是否能接收事件,不能接收事件的三種情況
10if (self.userinteractionenabled == no || self.alpha <= 0.01 || self.hidden ==yes)
13//
從後往前遍歷子控制項查詢最合適的view
14int count = (int
) self.subviews.count;
15for (int i = count -1; i >= 0; i--) 26}
27//
迴圈結束都沒找到就返回當前view作為最合適的view
28return
self;
29 }
事件響應者鏈條示意圖:
響應者鏈條的事件傳遞處理:
(6)響應觸控事件
讓物件按著預設的程式移動比如旋轉三角形,看起來是有些亮點的,但是如果你想讓使用者和你的opengl es圖形進行互動,該如何做呢?使你的opengl es程式可以觸控互動的關鍵是,實現glsu ceview的過載方法ontouchevent 讓它可以監聽觸控事件。這篇文章將向你展示如何監聽觸控事件讓...
觸控事件之事件傳遞
uiview是如何判定這個事件是否是自己應該處理的呢?hittest withevent 方法的處理流程如下 呼叫當前view的pointinside withevent 方法來判定觸控點是否在當前view內部,如果返回no,則hittest withevent 返回nil 如果返回yes,則向當前...
ios觸控事件二 事件傳遞
了解了uievent以及uitouch之後,那麼事件在ios是如何傳遞的呢?響應者鏈 響應者物件是乙個能夠接收並處理事件的物件。注意在ios中不是任何物件都能處理事件,只有直接或間接繼承了uiresponder的物件才可作為事件的響應者。uiresponder是所有響應者物件的基類。在ios的ui控...