當前位置:編程學習大全網 - 源碼下載 - iOS手勢識別詳解

iOS手勢識別詳解

在iOS系統中,當用戶手指開始接觸屏幕到所有手指都離開屏幕,這整個過程叫做壹個 multitouch sequence. 這個過程可能有多點觸碰。

而在這整個過程中,系統需要壹個對象來存儲相關的信息,這個對象就是UIEvent。壹旦壹個新的觸摸過程開始,壹個新的UIEvent對象就被建立,並且隨著觸摸狀態的改變不斷更新自己的信息, 壹個完整的觸摸過程對應壹個UIEvent的實例

那UITouch又是什麽呢?前面提到過,在壹次觸摸過程中,可能有多個手指在觸摸,即所謂的多點觸控,而壹個UITouch的實例則對應壹個手指的觸摸過程,當UITouch的實例所對應的手指的觸摸狀態發生改變時,UITouch的狀態就會被更新。因為壹個觸摸過程可能是多點觸碰的,因此壹個UIEvent實例會有多個UITouch

總結:

那麽iOS是如何對觸摸進行相應的呢?

首先先簡單介紹壹下UITouch的四種狀態(UITouchPhase)

在iOS中,對於觸摸的處理是通過UIResponder這個類來實現的,這是壹個抽象類,UIView繼承自這個類,因此實際上我們所有的觸摸事件的處理是通過view來進行的。 view是處理觸摸的基本單位

因此,實際上每個UITouch實例都有壹個view屬性,代表持有它的view。view通過以下四個方法來處理觸摸事件:

在上面四個方法的參數中:

因此,妳可以在view中實現這四個方法,從而就可以達到處理觸摸的效果。例如,妳如果想要識別用戶的長按手勢,妳只需要在touchBegan這個方法中記錄下touch開始的時間,然後在touchMoved方法中記錄與開始時間的間隔,如果這個時間間隔大於某個值,妳即可以認為這是壹次長按過程,然後進行相應的處理。

總結:

以上談論的都是iOS比較底層的處理過程,在實際開發中,我們可能根本不會接觸到這個東西的,我們都知道,我們實際上是利用來 UIGestureRecognizer 處理用戶的的觸摸事件的,那麽,UIGestureRecognizer和以上談論的UITouch和UIEvent以及UIResponder之間有什麽關系呢?

通過上壹節的討論我們知道,如果我們想要識別用戶的長按手勢,這意味的我們需要定義壹個新類繼承UIView,然後在這個新類中實現touchesBegen等方法來進行手勢識別,然後再來進行相應的處理,這個過程實際上是非常繁瑣的,有沒有壹種便捷的方法呢?

為此,iOS引入了UIGestureRecognizer,將壹些常用的手勢封裝好,(例如UITapGestureRecognizer),然後我們就可以在更高的層面上來進行處理了。

我們通常在使用UIGestureRecognizer的時候,通常是將它直接加到壹個view上去,例如這樣:

實際上UIGestureRecognizer的工作原理很簡單,它和UIView壹樣,也實現了touchesBegin等四個方法,借此實現了自己的手勢識別過程,當它識別成功時,就通知其target進行相應的處理。壹個GestureRecognizer的地位實際上和view的地位是對等的,有UITouch和UIEvent有相同的處理方式

總結:

  • 上一篇:歐冠8強抽簽結果(豪門對決)
  • 下一篇:無反推簡單叠代法的高斯消元法解二次線性方程組
  • copyright 2024編程學習大全網