事件響應(yīng)
當(dāng)一個(gè)硬件事件發(fā)生后
首先有 IOKit.framework 生成一個(gè) IOHIDEvent 事件
并由SpringBoard接收
然后通過 mach port 轉(zhuǎn)發(fā)給需要的app進(jìn)程
隨后蘋果注冊(cè)的 Source1 會(huì)觸發(fā)回調(diào)
并調(diào)用_UIApplicationHandleEventQueue()進(jìn)行內(nèi)部的分發(fā)
_UIApplicationHandleEventQueue() 會(huì)把 IOHIDEvent 處理 并包裝成 UIEvent ,其中包括旋轉(zhuǎn),觸摸等發(fā)送給window
手勢識(shí)別
當(dāng) _UIApplicationHandleEventQueue() 識(shí)別了一個(gè)手勢時(shí)
會(huì)首先調(diào)用 cancel 當(dāng)前的 touchesBegin/Move/End 系列回調(diào)給打斷
隨后系統(tǒng)將對(duì)應(yīng)的 UIGestureRecognizer 標(biāo)記為待處理
蘋果注冊(cè)了一個(gè) Observer 監(jiān)測 BeforeWaiting(Loop即將進(jìn)入休眠)事件
這個(gè)observer的回調(diào)函數(shù)為:_UIGestureRecognizerUpdateObserver()
其內(nèi)部會(huì)獲取所有剛被標(biāo)記為待處理的 GestureRecognizer
并執(zhí)行 GestureRecognizer 的回調(diào)
當(dāng)有 UIGestureRecognizer 的變化(創(chuàng)建/銷毀/狀態(tài)改變)時(shí),這個(gè)回調(diào)都會(huì)進(jìn)行相應(yīng)處理。