Swift之手勢操作
手勢識別在 iOS 中非常重要,他極大地提高了移動裝置的使用便捷性。iOS 系統在 3.2 以後,提供了一些常用的手勢(UIGestureRecognizer 的子類),今天給大家分享一下在swift中這些手勢的用法。 (≧▽≦)/
使用手勢很簡單,分為三步:
- 建立手勢識別器物件例項。建立時,指定一個回撥方法,當手勢開始,改變、或結束時,執行回撥方法。
- 設定手勢識別器物件例項的相關屬性(可選部分)
- 新增到需要識別的 View 中。每個手勢只對應一個 View,當螢幕觸控在 View 的邊界內時,如果手勢和預定的一樣,那就會執行回撥方法。
一、UISwipeGestureRecognizer-滑動手勢
let swip = UISwipeGestureRecognizer(target: self, action: #selector(ViewController.swipeGesture(_:)))
//設定滑動方向
//如果UISwipeGestureRecognizer在不指定方向的時候,預設向右滑動才會觸發事件。如果要指定方向,需要設定direction屬性
swip.direction = UISwipeGestureRecognizerDirection.Left
self.view.addGestureRecognizer(swip)
那麼有朋友可能會問,如果想要在各個方向都能滑動要怎辦呢,其實只要多定義幾個UISwipeGestureRecognizer就可以了
let swipeUp = UISwipeGestureRecognizer(target:self, action:#selector(swipeGesture(_:)))
swipeUp.direction = UISwipeGestureRecognizerDirection.Up
self.view.addGestureRecognizer(swipeUp)
let swipeDown = UISwipeGestureRecognizer(target:self, action:#selector(swipeGesture(_:)))
swipeDown.direction = UISwipeGestureRecognizerDirection.Down
self.view.addGestureRecognizer(swipeDown)
滑動響應事件:
//滑動手勢
func swipeGesture(swip:UISwipeGestureRecognizer) {
print("開始滑動")
if swip.direction == UISwipeGestureRecognizerDirection.Up {
print("向上滑動")
}else if swip.direction == UISwipeGestureRecognizerDirection.Down {
print("向下滑動")
}
}
Tip: 有時候我們會發現滑動手勢不響應,那可能是因為你滑動的太短了哦
二、UITapGestureRecognizer-點選手勢
在這六種手勢識別中,只有一種手勢是離散型手勢,就是 UITapGestureRecognizer。離散型手勢的特點就是:一旦識別就無法取消,而且只會呼叫一次手勢操作事件(初始化手勢時指定的回撥方法)。
換句話說其他五種手勢是連續型手勢,而連續型手勢的特點就是:會多次呼叫手勢操作事件,而且在連續手勢識別後可以取消手勢。
let tapOne = UITapGestureRecognizer(target: self, action: #selector(ViewController.tapOne))
//通過numberOfTouchesRequired屬性設定觸控點數,比如設定2表示必須兩個手指觸控時才會觸發
tapOne.numberOfTapsRequired = 1
//通過numberOfTapsRequired屬性設定點選次數,單擊設定為1,雙擊設定為2
tapOne.numberOfTouchesRequired = 1
//雙擊
let tapTwo = UITapGestureRecognizer(target: self, action: #selector(ViewController.tapTwo))
tapTwo.numberOfTapsRequired = 2
tapTwo.numberOfTouchesRequired = 1
//宣告點選事件需要雙擊事件檢測失敗後才會執行
tapOne.requireGestureRecognizerToFail(tapTwo)
點選響應事件:
//單擊
func tapOne() {
print("單擊")
}
//雙擊
func tapTwo() {
print("雙擊")
}
三、UIPinchGestureRecognizer-捏合手勢
捏合即進行當前圖片檢視縮放
let pinch = UIPinchGestureRecognizer(target: self, action: #selector(ViewController.pinchDid(_:)))
//捏合手勢
func pinchDid(pinch:UIPinchGestureRecognizer) {
print(pinch.scale)//列印捏合比例
print(pinch.velocity)//列印捏合速度
}
四、UIRotationGestureRecognizer-旋轉手勢
旋轉即進行當前圖片檢視角度旋轉
let rotation = UIRotationGestureRecognizer(target: self, action: #selector(ViewController.rotationDid(_:)))
//旋轉手勢
func rotationDid(rotation:UIRotationGestureRecognizer) {
print(rotation.rotation*(180/(CGFloat(M_PI))))//列印旋轉的角度
}
五、UIPanGestureRecognizer-拖動手勢
拖動即進行當前圖片檢視位置移動
var rect: UIView?
override func viewDidLoad() {
super.viewDidLoad()
rect = UIView(frame: CGRectMake(0, 0, 100, 100))
rect?.center = self.view.center
rect?.backgroundColor = UIColor.cyanColor()
self.view.addSubview(rect!)
//拖動手勢
let pan = UIPanGestureRecognizer(target: self, action: #selector(ViewController.panDid(_:)))
pan.maximumNumberOfTouches = 1 //一個手指拖動
}
//拖動手勢
func panDid(pan:UIPanGestureRecognizer) {
let point = pan.locationInView(self.view)
//設定矩形的位置
rect?.center = point
}
六、UILongPressGestureRecognizer-長按手勢
let longPress = UILongPressGestureRecognizer(target: self, action: #selector(ViewController.longPress(_:)))
longPress.numberOfTapsRequired = 0 //預設為0
longPress.numberOfTouchesRequired = 1 //預設為1
//長按手勢
func longPress(longPress:UILongPressGestureRecognizer) {
if longPress.state == .Began {
print("長按響應開始")
} else {
print("長按響應結束")
}
}
當我們使用手勢的時候,我們可能會監聽螢幕的狀態,這個時候我們還會用到UITouch物件,重寫他的相關方法:
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
print("開始觸控")
}
override func touchesMoved(touches: Set<UITouch>, withEvent event: UIEvent?) {
print("觸控移動")
}
override func touchesCancelled(touches: Set<UITouch>?, withEvent event: UIEvent?) {
print("取消觸控")
}
override func touchesEnded(touches: Set<UITouch>, withEvent event: UIEvent?) {
print("觸控結束")
}
好啦,手勢在swift中的使用就分享到這裡啦。( _ )/~~拜拜
相關文章
- [譯] 深入 Flutter 之手勢Flutter
- ReactNative之手勢識別React
- Flutter實戰之手勢基礎篇Flutter
- iOS開發教程之手勢識別方法iOS
- Flutter 入門指北(Part 10)之手勢處理和動畫Flutter動畫
- c# winform之手工定時器timer操作示例C#ORM定時器
- Swift 4新知:KVC和KVO新姿勢Swift
- iOS 手勢操作iOS
- Swift中的指標操作及使用Swift指標
- Swift裡我用這個姿勢寫UserDefaultsSwift
- iPhone X手勢操作怎麼用?蘋果iPhone Xs手勢操作使用教程iPhone蘋果
- SWIFT:天下大勢,分久必合合久必分(附下載)Swift
- Swift中使用Contains的正確姿勢SwiftAI
- iOS swift 最好用的 手勢密碼 九宮格iOSSwift密碼
- 前端面試之手寫程式碼前端面試
- Swift 中關於操作符的那些事兒Swift
- Swift學習筆記(二十)——陣列的基本操作Swift筆記陣列
- OC/Swift/C/C++混合使用的程式設計姿勢SwiftC++程式設計
- 保護自己之手機定位資訊收集
- 前端筆試之手寫程式碼(一)前端筆試
- 破解教程之手脫UPX的DLL
- IP 庫之手機基站資料篇
- docker之手動構建新的映象Docker
- 波段操作技巧,強勢波段操作三原則,什麼是波段操作技巧
- 用Swift列舉完美實現3Dtouch快捷操作Swift3D
- Swift學習筆記(二十二)——字典的基本操作Swift筆記
- PHP 檔案操作的各種姿勢PHP
- Python 操作 MySQL 的正確姿勢PythonMySql
- Spring系列之手寫一個SpringMVCSpringMVC
- 移動網際網路仍需“有形之手”
- 蘋果全新Swift程式語言發展勢頭良好 即將騰飛蘋果Swift
- Oracle緊急固定執行計劃之手段Oracle
- Android多程式之手動編寫Binder類Android
- Node之手寫靜態資源伺服器伺服器
- 快應用之手摸手,跟我走(1)
- 快應用之手摸手,跟我走(2)
- Android工具類之手機元件呼叫工具類Android元件
- 多執行緒之手撕執行緒池執行緒