iOS中觸控事件的傳遞和響應機制
所有繼承響應者物件UIResponder都能接收並處理事件。按照時間順序,先找到到最合適的view,然後就會呼叫view的touches方法,這些方法的預設做法是將事件順著響應這鏈條向上傳遞,將事件交由上一個響應者進行處理,直到有一個view能處理該響應為止或者丟棄。這是一個從上到下,再從下到上的過程。
1. 事件的產生
- 發生事件後,系統會將該事件加入到一個由UIApplication管理的事件佇列中。
- UIApplication會從事件佇列中取出最前面的事件,並將該事件分發下去處理。通常,先傳送事件給應用程式的主視窗(keywindow)。
- keywindow會在檢視層次結構中找到一個最合適的檢視來處理事件。
2. 事件的傳遞
事件的傳遞先從父控制元件傳遞到子控制元件(UIApplication->window->尋找處理事件最合適的view)。
如果父view不能接受觸控事件,那麼子view也不能接收到觸控事件。
2.1 如何找到最合適的view來處理事件
- 判斷keywindow自己是否接受事件
- 判斷事件是否在自己身上
- 子view陣列中從後往前遍歷子控制元件,重複前面1,2步驟
- 如果沒有合適的子控制元件,那自己就是最合適的控制元件
2.2 尋找最合適的view底層剖析
有兩個重要的方法:
hitTest:withEvent:
pointInside:withEvent:
view會呼叫hitTest:withEvent:方法,hitTest:withEvent:方法底層會呼叫pointInside:withEvent:方法判斷觸控點是不是在這個view的座標系上。如果在座標系上,會分發事件給這個view的子view。然後每個字view重複以上步驟,直至最底層的一個合適的view。
3.事件的響應
事件響應會先從底層最合適的view開始,然後隨著上一步找到的鏈一層一層響應touch事件。預設touch事件會傳遞給上一層。如果到了viewcontroller的view,就會傳遞給viewcontroller。如果viewcontroller不能處理,就會傳遞給UIWindow。如果UIWindow無法處理,就會傳遞給UIApplication。如果UIApplication無法處理,就會傳遞給UIApplicationDelegate。如果UIApplicationDelegate不能處理,則會丟棄該事件。
相關文章
- iOS 中的事件傳遞和響應機制 - 原理篇iOS事件
- iOS 中的事件傳遞和響應機制 - 實踐篇iOS事件
- iOS 中的事件傳遞和響應機制 – 實踐篇iOS事件
- Android中觸控事件的傳遞機制Android事件
- Android觸控事件傳遞機制Android事件
- 史上最詳細的iOS之事件的傳遞和響應機制iOS事件
- 初識Android觸控事件傳遞機制Android事件
- 記錄下:iOS事件的事件的傳遞和響應iOS事件
- 淺談 iOS 事件的傳遞和響應過程iOS事件
- 事件傳遞和響應鏈事件
- Android中TouchEvent觸控事件機制Android事件
- Flutter:如何響應觸控事件Flutter事件
- 事件傳遞和響應者鏈條事件
- Android觸控事件傳遞機制及viewpager巢狀fragment衝突處理Android事件Viewpager巢狀Fragment
- Android事件傳遞機制Android事件
- iOS探索:UI檢視之事件傳遞&檢視響應iOSUI事件
- Android 觸控事件處理機制Android事件
- Android TouchEvent事件傳遞機制Android事件
- Android onTouch事件傳遞機制Android事件
- Yii中事件觸發機制事件
- Android View 事件傳遞機制剖析AndroidView事件
- Android10_原理機制系列_事件傳遞機制Android事件
- 觸控事件分發核心機制優化吸收事件優化
- 用一張圖告訴你Android中的事件傳遞機制Android事件
- iOS實現ScrollView中子控制元件(Button,自定義View)的觸控事件響應iOSView控制元件事件
- WebSocket的事件觸發機制Web事件
- 【Android Developers Training】 67. 響應觸控事件AndroidDeveloperAI事件
- Android Touch事件傳遞機制通俗講解Android事件
- Android學習之 Touch事件傳遞機制Android事件
- android觸控事件分發機制,曾困惑你我的地方Android事件
- Android觸控事件的應用Android事件
- Android事件傳遞、多點觸控及滑動衝突的處理Android事件
- cocos2dx 3.2中的觸控機制
- 快速理解android事件傳遞攔截機制概念Android事件
- View 事件傳遞體系知識梳理(1) 事件分發機制View事件
- ios,android和javascript的UI事件機制iOSAndroidJavaScriptUI事件
- 觸控事件事件
- iOS學習筆記05 觸控事件iOS筆記事件