刨根問底iOS觸摸事件——— 從“觸摸屏幕”后引起的一系列連鎖反應

有一次很好奇跟一個同事討論,當我們觸摸屏幕后,整個iOS系統(tǒng)是如何運轉(zhuǎn)?實際開發(fā)中,我們都會應用UIGestureRecognizer或者UIRespose去處理事件,但是很少有人能準確回答出屏幕如何接收觸摸,系統(tǒng)如何處理的觸摸?
本文就來刨根問底,“觸摸屏幕”究竟引起了那些連鎖反應,那些框架參與其中。

觸摸事件傳遞流程.jpg

上圖是蘋果官網(wǎng)總結(jié)從iOS開發(fā)者的角度給出的簡圖,注意我的用詞,“iOS開發(fā)者的角度”和“簡圖”,這極度反應出蘋果官方文檔對整個事件的模糊處理,因為更多開發(fā)者只關心應用怎么處理各種事件。

整個iOS應用響應手指觸摸后的一系列流程,整個生命周期我概括為3個階段:系統(tǒng)響應 -> 桌面處理 -> App處理。

系統(tǒng)響應

桌面處理

App處理

概念

上面的“觸摸事件全流程”中有很多重要的概念,再次做一個解釋和擴展。

  • Events

Events in iOS represent fingers touching views of an application or the user shaking the device。

這是官網(wǎng)對Events的定義,翻譯過來就是iOS事件表示手指觸摸應用程序視圖或者用戶搖動設備。從定義入手,我們可以將事件分為兩類:“觸摸事件”和“運動事件”,實際上,iOS中還有一種“遠程事件”,比如耳機操作等,本文主要探討的是“觸摸事件”,因此本文很多“事件”是“觸摸事件”的簡稱。

  • UITouch

An object representing the location, size, movement, and force of a touch occurring on the screen.

表示屏幕上發(fā)生的觸摸的位置,大小,移動和力度的對象。

  • UITouch.png
  • UIEvent

An object that describes a single user interaction with your app.

描述單個用戶與您的應用交互的對象。


UIEvent.png
  • UIResponder


    UIResponder.png
  • Target-Action

  • Darwin
    核心操作系統(tǒng)層就是我們經(jīng)常提到的Darwin,Darwin(達爾文)是蘋果公司于2000年發(fā)布的一個開源操作系統(tǒng),Darwin是macOS 和 iOS的一部分。可以將Darwin理解為操作系統(tǒng)的代號。Darwin由XNU和一些其他的Darwin庫組成。

  • XNU
    XNU是由蘋果公司發(fā)布的操作系統(tǒng)內(nèi)核,即Darwin的內(nèi)核是XNU,是Darwin操作系統(tǒng)的一部分。除macOS外,XNU還是iOS、tvOS、watchOS操作系統(tǒng)的內(nèi)核。XNU是X is not Unix的縮寫。XNU包含三部分:Mach內(nèi)核、BSD、I/O Kit。

  • Mach
    XNU內(nèi)核以一個被深度定制的Mach3.0內(nèi)核作為基礎。Mach是一個由卡內(nèi)基梅隆大學開發(fā)的計算機操作系統(tǒng)微內(nèi)核,主要是為了用于操作系統(tǒng)研究,特別是在分布式與并行運算上。XNU中的Mach所負責的功能非常少(核心功能),只能完成操作系統(tǒng)最基本的職責,比如任務調(diào)度、消息傳遞、進程間通信等。

  • BSD
    BSD,伯克利軟件套件(Berkeley Software Distribution),也被稱為伯克利Unix(Berkeley Unix),是一個操作系統(tǒng)的名稱。XNU中的BSD部分提供了POSIX應用程序接口(BSD系統(tǒng)稱之為API):進程模型、網(wǎng)絡協(xié)議棧、虛擬文件系統(tǒng)等。

  • IOKit
    IOKit是一個設備驅(qū)動框架,為開發(fā)者提供了開發(fā)設備驅(qū)動程序的API。

Darwin內(nèi)核.png
  • SpringBoard.app
    SpringBoard.app是一個系統(tǒng)進程,可以理解為桌面系統(tǒng),可以統(tǒng)一管理和分發(fā)系統(tǒng)接收到的觸摸事件。

參考書籍

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

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

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