自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

iOS中觸摸事件的傳遞和響應(yīng)機(jī)制

移動開發(fā) iOS
所有繼承響應(yīng)者對象UIResponder都能接收并處理事件。按照時(shí)間順序,先找到到最合適的view,然后就會調(diào)用view的touches方法,這些方法的默認(rèn)做法是將事件順著響應(yīng)這鏈條向上傳遞,將事件交由上一個(gè)響應(yīng)者進(jìn)行處理,直到有一個(gè)view能處理該響應(yīng)為止或者丟棄。這是一個(gè)從上到下,再從下到上的過程。

所有繼承響應(yīng)者對象UIResponder都能接收并處理事件。按照時(shí)間順序,先找到到最合適的view,然后就會調(diào)用view的touches方法,這些方法的默認(rèn)做法是將事件順著響應(yīng)這鏈條向上傳遞,將事件交由上一個(gè)響應(yīng)者進(jìn)行處理,直到有一個(gè)view能處理該響應(yīng)為止或者丟棄。這是一個(gè)從上到下,再從下到上的過程。

1. 事件的產(chǎn)生

  • 發(fā)生事件后,系統(tǒng)會將該事件加入到一個(gè)由UIApplication管理的事件隊(duì)列中。
  • UIApplication會從事件隊(duì)列中取出最前面的事件,并將該事件分發(fā)下去處理。通常,先發(fā)送事件給應(yīng)用程序的主窗口(keywindow)。
  • keywindow會在視圖層次結(jié)構(gòu)中找到一個(gè)最合適的視圖來處理事件。

2. 事件的傳遞

事件的傳遞先從父控件傳遞到子控件(UIApplication->window->尋找處理事件最合適的view)。

如果父view不能接受觸摸事件,那么子view也不能接收到觸摸事件。

2.1 如何找到最合適的view來處理事件

判斷keywindow自己是否接受事件

判斷事件是否在自己身上

子view數(shù)組中從后往前遍歷子控件,重復(fù)前面1,2步驟

如果沒有合適的子控件,那自己就是最合適的控件

2.2 尋找最合適的view底層剖析

有兩個(gè)重要的方法:

  1. hitTest:withEvent: 
  2. pointInside:withEvent: 

view會調(diào)用hitTest:withEvent:方法,hitTest:withEvent:方法底層會調(diào)用pointInside:withEvent:方法判斷觸摸點(diǎn)是不是在這個(gè)view的坐標(biāo)系上。如果在坐標(biāo)系上,會分發(fā)事件給這個(gè)view的子view。然后每個(gè)字view重復(fù)以上步驟,直至***層的一個(gè)合適的view。

3.事件的響應(yīng)

事件響應(yīng)會先從底層最合適的view開始,然后隨著上一步找到的鏈一層一層響應(yīng)touch事件。默認(rèn)touch事件會傳遞給上一層。如果到了viewcontroller的view,就會傳遞給viewcontroller。如果viewcontroller不能處理,就會傳遞給UIWindow。如果UIWindow無法處理,就會傳遞給UIApplication。如果UIApplication無法處理,就會傳遞給UIApplicationDelegate。如果UIApplicationDelegate不能處理,則會丟棄該事件。

責(zé)任編輯:武曉燕 來源: CocoaChina
相關(guān)推薦

2023-10-12 22:44:16

iOS事件響應(yīng)鏈

2013-04-15 15:22:06

2014-03-04 15:28:32

iOS開發(fā)消息傳遞機(jī)制

2013-04-24 11:15:56

Android開發(fā)Touch事件傳遞機(jī)制

2010-03-22 16:49:02

SIM系統(tǒng)IAM系統(tǒng)響應(yīng)機(jī)制

2011-08-03 17:32:17

IOS UIScrollVi touch

2010-08-06 09:56:06

Flex事件機(jī)制

2010-08-06 10:03:42

Flex事件

2015-04-14 09:55:40

2015-07-08 16:46:05

iOS鍵盤

2025-02-19 13:00:00

移動端觸摸事件響應(yīng)速度JavaScrip

2013-04-22 15:40:00

Android開發(fā)觸摸事件與點(diǎn)擊事件區(qū)別

2013-05-14 11:08:23

AIR Android觸摸事件鼠標(biāo)事件

2016-12-08 22:59:47

觸摸事件android

2010-08-13 14:05:24

Flex事件機(jī)制

2023-11-02 08:10:13

框架Spring程序事件

2020-02-26 09:00:00

Chatbot架構(gòu)模型聊天機(jī)器人

2010-08-09 09:47:34

Flex事件機(jī)制

2017-01-11 18:44:43

React Nativ觸摸事件Android

2022-11-03 15:36:44

事件響應(yīng)反模式系統(tǒng)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號