手勢識別器是Swift中處理觸摸或點按事件最簡單的方式,通常為一個 View 綁定多個不同類型的手勢識別器來處理不同的觸摸或點按事件。
系統(tǒng)使用模式匹配來監(jiān)測觸摸或點擊事件是否符合某種類型的手勢,當某種手勢匹配成功時,與當前 View 綁定的該類型的手勢識別器對象會通知指定的 Target,隨后調(diào)用 Target 中定義的 Action (Target-Action Mechanism)

手勢識別器有兩種類型:離散型和連續(xù)型。一個離散的手勢識別器在手勢被識別后只調(diào)用一次 Action。而連續(xù)的手勢識別器在滿足其初始識別條件之后,將多次調(diào)用 Action,并在手勢事件中的信息發(fā)生更改時發(fā)出通知。例如,每次觸摸位置改變時,UIPanGestureRecognizer對象都會調(diào)用 Action。
-
配置手勢識別器
通過代碼進行配置 -- 創(chuàng)建所需的手勢控制器對象,配置 Target 和 Action,將該手勢識別器添加到所需的 View 中
let swipeDownGestureRecognizer = UISwipeGestureRecognizer()
swipeDownGestureRecognizer.addTarget(self, action: #selector(someMethod))
swipeDownGestureRecognizer.direction = .down
view.addGestureRecognizer(swipeDownGestureRecognizer)
在故事板中,將手勢識別器拖動到視圖中
在合適的對象中實現(xiàn)識別手勢時調(diào)用的動作方法,樣式如下
@IBAction func myActionMethod(_ sender: UIGestureRecognizer)
將該動作方法連接到手勢識別器 -- 您可以在Interface Builder中創(chuàng)建此連接,方法是右鍵單擊手勢識別器并將其發(fā)送的操作選擇器連接到動作方法所在的對象。
-
對手勢的響應(yīng)
對于離散的手勢,手勢的 Action 類似于 UIButton 的 Action。一旦 Action 被調(diào)用,就可以執(zhí)行任何適合該手勢的任務(wù)。對于連續(xù)的手勢,手勢的 Action 可以響應(yīng)對手勢的識別,但是它也可以在識別手勢之前跟蹤事件。跟蹤事件可以讓您創(chuàng)建更具交互性的體驗。例如,您可以使用來自UIPanGestureRecognizer對象的更新來重新定位應(yīng)用程序中的內(nèi)容。
手勢識別器通過state屬性來傳達識別器當前的識別狀態(tài)。對于識別連續(xù)手勢的識別器,state的值有UIGestureRecognizer.State.began, UIGestureRecognizer.State.changed, UIGestureRecognizer.State.ended, UIGestureRecognizer.State.cancelled。Action 通過識別器的狀態(tài)來決定不同狀態(tài)下的動作。
例如,可以使用開始狀態(tài)和更改狀態(tài)對內(nèi)容進行臨時更改,使用結(jié)束狀態(tài)使這些更改永久不變,并使用取消狀態(tài)放棄更改。在采取行動之前,一定要檢查手勢識別器的狀態(tài)屬性值。
不同類型的手勢識別器的使用教程:
- Handling Tap Gestures
- Handling Long-Press Gestures
- Handling Pan Gestures
- Handling Swipe Gestures
- Handling Pinch Gestures
- Handling Rotation Gestures
-
參考文獻