Swift之手势操作
2016-07-13 本文已影响4024人
大脸猫121
手势识别在 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中的使用就分享到这里啦。( _ )/~~拜拜