iOS的觸摸事件個人總結,分為兩步: 第一步:是找到哪個視圖上觸摸 第二步:分析由誰去響應(響應者連) 1.尋找被觸摸的視圖原理如下圖 hitText:withEvent:的方法處理流程: 首先會在當前視圖view上調用pointInside:withEvent:方法來判斷觸摸事件是否存在當前vie ...
iOS的觸摸事件個人總結,分為兩步:
第一步:是找到哪個視圖上觸摸
第二步:分析由誰去響應(響應者連)
1.尋找被觸摸的視圖原理如下圖
hitText:withEvent:的方法處理流程:
首先會在當前視圖view上調用pointInside:withEvent:方法來判斷觸摸事件是否存在當前view中,如果返回NO,則說明觸摸事件不在該view範圍中,hitText:withEvent:方法返回nil;如果返回YES,則說明觸摸在該view中,則向該view的subViews發送htiText:withEvent:消息,所有subviews的數組遍歷順序是從後往前,直至遍歷到pointInside:withEvent:返回值為非空或者遍歷完所有subview結束。如果遍歷有非空對象,則hitTextField:withEvent:返回該對象結束;如果遍歷完沒有非空對象,則返回自己(self)。
2.響應者原理如下圖
首先會在觸摸view上調用inital view方法,看能否處理此事件,如果不能則會將事件傳遞給其上級視圖(inital view的superView);如果上級視圖仍然無法處理則會繼續往上傳遞;一直傳遞到視圖控制器view controller,首先判斷視圖控制器的根視圖view是否能處理此事件;如果不能則接著判斷該視圖控制器能否處理此事件,如果還是不能則繼續向上傳遞;(對於第二個圖視圖控制器本身還在另一個視圖控制器中,則繼續交給父視圖控制器的根視圖,如果根視圖不能處理則交給父視圖控制器處理);一直到window,如果window還是不能處理此事件則繼續交給application(UIApplication單例對象)處理,如果最後application還是不能處理此事件則將其丟棄。
轉載請註明出處!