事件響應(yīng)和手勢識(shí)別

事件響應(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)處理。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • https://blog.ibireme.com/2015/05/18/runloop/ RunLoop 是 iO...
    SmallDe閱讀 781評(píng)論 0 51
  • RunLoop 是 iOS 和 OS X 開發(fā)中非?;A(chǔ)的一個(gè)概念,這篇文章將從 CFRunLoop 的源碼入手,...
    iOS_Alex閱讀 974評(píng)論 0 10
  • Runloop是iOS和OSX開發(fā)中非?;A(chǔ)的一個(gè)概念,從概念開始學(xué)習(xí)。 RunLoop的概念 -般說,一個(gè)線程一...
    小貓仔閱讀 1,113評(píng)論 0 1
  • 轉(zhuǎn)載:http://www.cocoachina.com/ios/20150601/11970.html RunL...
    Gatling閱讀 1,559評(píng)論 0 13
  • RunLoop 的概念 一般來講,一個(gè)線程一次只能執(zhí)行一個(gè)任務(wù),執(zhí)行完成后線程就會(huì)退出。如果我們需要一個(gè)機(jī)制,讓線...
    Mirsiter_魏閱讀 677評(píng)論 0 2

友情鏈接更多精彩內(nèi)容