第一章學(xué)習(xí)筆記 - 手勢和觸控

手勢和觸控基礎(chǔ)知識

觸摸控制 是 iOS 系統(tǒng)交互的核心方式。

觸控

Cocoa Touch 以盡可能簡單地方式實現(xiàn)了直接的操控。它會把觸控事件發(fā)送給你正在進行交互的視圖。

每一次觸控都會轉(zhuǎn)達很多的信息: 觸控發(fā)生的位置,點擊屏幕的次數(shù),觸控發(fā)生的時間。

iOS 使用 響應(yīng)鏈 (responder chain) 來確定究竟是哪個對象應(yīng)該對觸控做出響應(yīng)。 響應(yīng)者(responders)是響應(yīng) 事件(event) 的對象。 這些響應(yīng)者扮演的角色就好比是一串管理者,對這些 事件(event)進行管理。當(dāng)用戶觸摸屏幕時,應(yīng)用會去尋找一個對象來處理這一個觸控事件。 觸摸(touch)被傳遞下去,從一個視圖到另外一個視圖,直到一些對象來接管并且對這個 事件(event)做出響應(yīng)。

在大多數(shù)情況下,觸摸(touches)以及其信息 被存儲在 UITouch 對象中,觸摸(touches)以組的形式在 UIEvent 對象中傳遞。每一個 UIEvent 對象都代表了一個單一的 觸控事件,包含一次或多次觸摸。這一點既決定了開發(fā)者如何去響應(yīng)用戶的操作,也決定了用戶怎么在屏幕上進行操作。

你的應(yīng)用通過 視圖(UIView 或其子類的實例對象) 或者 視圖控制器(UIViewController 或其子類的實例對象) 來接收 觸摸(touches)。實現(xiàn)處理 觸摸(touch)的類需要通過繼承 UIResponder 類來實現(xiàn)。 你將會決定在哪兒處理和響應(yīng)這些 觸摸(touches)。 那些嘗試不使用 responder 類來實現(xiàn)簡單手勢控制的開發(fā)新人會遇到很多麻煩。

在視圖上處理 觸摸(touches) 看似違反直覺。你可能想去把界面顯示的方式和它對 touches 做出響應(yīng)的方式分離開。進一步說,視圖直接響應(yīng)觸控來實現(xiàn)交互看似違反了 MVC 設(shè)計模式,但是這樣做是很有必要的,而且可以提高封裝性。

階段

touches 是具有生命周期的。任意一個 touch 都會經(jīng)歷五個階段。

  1. UITouchPhaseBegan - 當(dāng)用戶剛接觸屏幕的時候
  2. UITouchPhaseMoved - 當(dāng)這個接觸動作在屏幕上移動時
  3. UITouchPhaseStationary - 當(dāng)一個接觸動作在屏幕上停止住時
  4. UITouchPhaseEnded - 當(dāng)用戶的手指從屏幕上移開時
  5. UITouchPhaseCancelled - 當(dāng) iOS 系統(tǒng)停止跟蹤一個 touch 時。 通常發(fā)生在,系統(tǒng)中斷或者是視圖從窗口移除或者是處在非激活狀態(tài)(有來電)。

這五個階段用來劃分一個觸控事件發(fā)生過程中的整個流程。

觸控和響應(yīng)方法

所有 UIResponder 類的子類,包括 UIView 和 UIViewController 都會對 touches 做出響應(yīng)。每一個類都決定了自身是否響應(yīng)或者是如何去響應(yīng)。當(dāng)需要去做出響應(yīng)時,這些類的實例會對用戶的觸控按照自己的方式進行響應(yīng)。

預(yù)定義的回調(diào)方法能處理觸控開始,觸控移動,觸控結(jié)束這幾種情形。和 階段(Phase)相對應(yīng)。方法如下:

  1. touchesBegan: withEvent: - 在觸控剛剛發(fā)生的時候被調(diào)用
  2. touchesMoved: withEvent: - 在觸控移動的時候被調(diào)用
  3. touchesEnded: withEvent: - 在觸控結(jié)束的時候被調(diào)用
  4. touchesCancelled: withEvent: - 當(dāng)系統(tǒng)強行中斷觸控事件的時候,該方法會被調(diào)用(舉例:你正在刷微博,突然有人來電,如果對該方法進行重載,那么該方法就是在此刻被調(diào)用的)

上面的每一個方法都屬于 UIResponder 方法,通常在 一個 UIView 或是 UIViewController 的子類中進行實現(xiàn)。
這些方法內(nèi)部并沒有實現(xiàn)什么功能。當(dāng)你想把觸控動作添加到應(yīng)用時,就應(yīng)該重載這些方法,實現(xiàn)自己需要的功能。
注意:在UITouchPhaseStationary 階段,沒有方法會被回調(diào)。

手勢識別器

通過手勢識別器類,當(dāng)用戶進行輕擊、縮放、旋轉(zhuǎn)、橫掃、拖動或是一個長按動作時,我們可以觸發(fā)回調(diào)方法。

幾種常見的手勢

  1. Taps - 輕擊,一指或多指
  2. Swipes - 橫掃
  3. Pinches - 捏縮
  4. Rotations - 雙指進行視圖的旋轉(zhuǎn)
  5. Pans - 拖拽進行平移
  6. Long presses - 長按

本人正在進行 iOS 開發(fā)進階學(xué)習(xí)。希望借助簡書這個平臺和志同道合的朋友一起交流,互促互進。該筆記的主體為譯文,也會有一些個人的想法和總結(jié),如有不正確或者不合理的地方,還望各位朋友指正! :)

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

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

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