觸控事件的產生 傳遞與響應

2022-08-11 08:54:14 字數 910 閱讀 2543

主視窗會在檢視層次結構中,通過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控...