UIGestureRecognizer是处理手势的一个抽象类,可以使用系统定义的手势或者自定义手势识别,是响应触摸事件的三大方式之一。
UIGestureRecognizer常用子类
旋转手势:UIRotationGestureRecognizer
边缘侧滑:UIScreenEdgePanGestureRecognizer
长按手势:UILongPressGestureRecognizer
点击手势(Tap)应该是我们最常用的手势。
除了可以使用系统定义的手势,也可以子类化实现自己的手势,比如官网自定义手势
UIGestureRecognizer创建
- 创建一个Target对象,事件响应对象,比如某个View;
- 实例化手势对象。使用-initWithTarget:action:方法进行对象初始化和响应绑定,设置当手势事件发生时,调用的方法;
- 为响应对象添加手势,使用addGestureRecognizer:方法;
- 实现手势事件发生时所调用的方法,及selector,事件函数单独定义。
UIGestureRecognizer常用属性和方法
初始化方法
public init(target: AnyObject?, action: Selector)初始化手势对象,并设置手势发生时调用的方法
获取手势点击的位置
public func locationOfTouch(touchIndex: Int, inView view:UIView?) -> CGPoint // 获取手势点击的位置;
手势点击的状态
public static var Recognized: UIGestureRecognizerState{ get }
UIGestureRecognizerState枚举值为:
- Possible:可能手势事件
- Began:开始手势事件
- Ended:结束手势事件
- Changed:手势位置发生变化
- Failed:无法识别的手势
- Cancelled:取消手势事件(事件响应会发送)
手势类型
1. 离散型手势(tap、swipe)
- 识别成功:possible -> recognized
- 识别失败:possible -> failed
2. 持续型手势(除了tap、swipe)
- 完整识别:Possible -> Began -> [Changed] -> End
- 失败识别:Possible -> Began -> [Changed] -> Cancelled
参考文档
iOS触摸事件全家桶:理解手势冲突神文章。