iOS事件處理指南
用戶會使用多種方式操作他們的iOS設備,例如觸摸屏幕或搖動設備。iOS能夠明白用戶操作硬件設備的時間和方式,并把這些信息傳遞給你的應用程序。你的應用反饋動作的方式越自然越直觀,那么它給用戶的體驗就越引人入勝越有魅力。

概覽
事件是對象,這些對象被發送給應用,來告訴應用用戶做出的動作。在iOS中,事件可以有多種方式:多點觸控事件,運動事件,多媒體控制事件。多媒體控制事件被稱為遠程控制事件,因為它能夠被外部配件引發。
UIKit讓你的應用很容易的監測到手勢。
iOS應用能識別觸摸的組合,并且以非常直觀的方式反饋給用戶,例如:放大內容作為對雙指捏合(以后用pinch代替)手勢反饋,滾動內容作為對輕拂(以后用flick代替)手勢的反饋。事實上,有些手勢是很常見的,他們內建于UIKit。例如,UIControl的子類,UIButton和UISlider,響應于特殊的手勢——點擊和拖拽。當你配置這些控件,它們將在觸摸發生時向目標對象發送一個動作信息。你也能夠通過運動手勢識別器,來利用views上面的目標-動作(target-action)機制。當你綁定一個手勢識別器到一個view上,整個view就會像一個控件那樣運作——對任何你指定的手勢進行反饋。
Target-action是一種設計模式。當一個事件發生時,一個對象持有必要的信息以傳遞一條信息(message)給另一個對象。
對于處理邏輯的復雜事件,手勢識別器提供一個高級別的概念。如果在你的應用中需要完成觸摸時間的處理,那么手勢識別器是一個非常推薦的方法,因為手勢識別器是非常強大的,可復用的,且適應性強。你可以使用一個內建的手勢識別器并自定義它的行為。或者你可以創建一個你自己的手勢識別器來識別一個新的手勢。
相關章節: 手勢識別器(Gesture Recognizers)
事件沿著特定的路徑尋找一個對象來處理它
當iOS識別出一個事件,它將傳遞這個事件給看起來與處理事件最相關的初始對象,例如觸摸發生的view。如果初始對象不能夠處理這個事件,iOS會繼續傳遞這個事件給更大范圍的對象,直到找到一個擁有足夠的條件環境(context)來處理這個事件的對象。這一系列的對象被稱為一個響應鏈(responder chain),并且,當iOS在鏈上傳遞事件時,它同時轉移響應這個事件的職責。這個設計模式讓事件處理具備協作性和動態特性。
相關章節: 事件傳遞: 響應鏈(Event Delivery: The Responder Chain)
UIEvent涵蓋一個觸摸,搖晃動作,或者一個遠程控制事件
很多事件是UIKit UIEvent類的實例。一個UIEvent對象包含關于事件的信息,你的應用將根據這些信息來決定如果對這個事件進行的響應。當一個用戶動作發生時——例如,的當手指觸摸到屏幕并且在屏幕表面移動時——iOS會連續地發送事件對象給負責處理的應用。每個事件對象對應一個類型——觸摸,搖晃動作,或遠程控制——和一個子類型。
相關章節:Multitouch Events, Motion Eventsand Remote Control Events
如果用戶點擊view,應用會接收到多點觸控事件
取決于你的應用,UIKit控件和手勢識別可能足以滿足你的應用的所有的觸摸事件處理。即使你的應用包含自定義視圖,您也能使用手勢識別器。作為一個經驗法則,當你的應用對觸摸的響應與視圖本身緊密耦合時,你才可以寫你自己自定義的觸摸事件(touch-event)處理,例如以觸摸的方式畫畫。在這些情況下,你將要負責低級別的事件的處理。你實現了觸摸的方法,在這些方法中,你要分析原始觸摸事件以及給出適當的響應。
相關章節:Multitouch Events
如果用戶移動他們的設備,應用會接收到動作事件
動作事件提供設備的位置,方向,和運動信息。通過對運動事件的反應,你可以給你的應用添加微妙且強大的功能。加速度計和陀螺儀的數據允許你來檢測傾斜,旋轉,和搖晃。動作事件有不同的形式,你可以使用不同的框架來處理它們。當用戶搖動裝置,UIKit傳遞一個UIEvent對象到應用程序。如果你想讓你的應用程序來接收高速率d,連續的加速度計和陀螺儀的數據,那請使用核心運動框架(Core Motion framework)。
相關章節:Motion Events
如果用戶操作多媒體控制器,應用會接收到遠程控制事件
iOS控制著外部附件發送遠程控制的事件到應用。這些事件讓用戶控制音頻和視頻,如通過耳機調節音量。處理多媒體遠程控制的事件可以使你的應用能夠響應這些類型的命令。
先決知識點
這個文檔假定你已經熟悉了以下知識:
- iOS應用開發的基本概念
- 創建應用程序用戶界面的章節
- 視圖和視圖控制器的工作方式,以及如果自定義它們