iOS中的事件傳遞和響應者鏈條,ios事件傳遞鏈條

來源:互聯網
上載者:User

iOS中的事件傳遞和響應者鏈條,ios事件傳遞鏈條

首先我們來看看iOS中事件的產生和傳遞過程:

1.發生觸摸事件後,系統會將該事件加入到一個由UIApplication管理的隊列事件中

2.UIApplication會從事件隊列中取出最前面的事件,並將事件分發下去以便處理,通常會先發送事件給應用程式的主視窗(keyWindow)

3.主視窗會在視圖階層中找到一個最合適的視圖來處理觸摸事件

4.找到合適的視圖控制項後,就會調用視圖控制項的touches方法來作事件的具體處理:touchesBegin... touchesMoved...touchesEnded等

5.這些touches方法預設的做法是將事件順著響應者鏈條向上傳遞,將事件叫個上一個相應者進行處理

下面我們舉個例子來示範下具體的傳遞過程,

一般事件的傳遞是從父控制項傳遞到子控制項的

例如:點擊了綠色的View,傳遞過程如下:UIApplication->Window->白色View->綠色View

點擊藍色的View,傳遞過程如下:UIApplication->Window->白色View->橙色View->藍色View

如果父控制項接受不到觸摸事件,那麼子控制項就不可能接收到觸摸事件

UIView不能接收觸摸事件的三種情況:

1.不接受使用者互動:userInteractionEnabled = NO;

2.隱藏:hidden = YES;

3.透明:alpha = 0.0~0.01

如何找到最合適的控制項來處理事件呢?有以下準則

1.自己是否能接受觸摸事件

2.觸摸點是否在自己身上

3.從後往前遍曆子控制項,重複上面的兩個步驟

4.如果沒有合格子控制項,那麼自己最適合處理

例如:

說明一下控制項的添加順序:白1->綠2->橙2->藍3->紅3->黃4

這裡點擊了橙色的那塊地區,事件傳遞判斷過程如下:

1.UIApplication從事件隊列中取出事件分發給UIWindow

2.UIWindow判斷自己是否能接受觸摸事件,可以

3.UIWindow判斷觸摸點是否在自己身上,是的。

4.UIWindow從後往前便利自己的子控制項,取出白1

5.白1都滿足最上面兩個條件,遍曆子控制項橙2

6.橙2都滿足最上面兩個條件,遍曆子控制項,先取出紅3

7.紅3不滿足條件2,取出藍3

8.藍3也不滿足條件2,最後最合適的控制項是橙2

找到合適的控制項之後就要進行響應了,這裡先介紹一下響應者鏈條:響應者鏈條其實就是很多響應者對象(繼承自UIResponder的對象)一起組合起來的鏈條稱之為響應者鏈條

一般預設做法是控制項將事件順著響應者鏈條向上傳遞,將事件交給上一個響應者進行處理。那麼如何判斷當前響應者的上一個響應者是誰呢?有以下兩個規則:

1.判斷當前是否是控制器的View,如果是控制器的View,上一個響應者就是控制器

2.如果不是控制器的View,上一個響應者就是父控制項

響應過程如:

如果控制器也不響應響應touches方法,就交給UIWindow。如果UIWindow也不響應,交給UIApplication,如果都不響應事件就作廢了。

最後總結來說一次完整的觸摸事件的傳遞響應過程為:

UIApplication-->UIWindow-->遞迴找到最合適處理的控制項-->控制項調用touches方法-->判斷是否實現touches方法-->沒有實現預設會將事件傳遞給上一個響應者-->找到上一個響應者-->找不到方法作廢

PS:利用響應者鏈條我們可以通過調用touches的super 方法,讓多個響應者同時響應該事件。

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.