IOS 七种手势操作(拖动、捏合、旋转、点按、长按、轻扫、自定

2020-01-18 18:39:01王旭

IOS 七种手势操作

今天为大家介绍一下IOS 的七种手势,手势在开发中经常用到,所以就简单 通俗易懂的说下, 话不多说,直接看代码:

1、UIGestureRecognizer 介绍

手势识别在 iOS 中非常重要,他极大地提高了移动设备的使用便捷性。

iOS 系统在 3.2 以后,他提供了一些常用的手势(UIGestureRecognizer 的子类),开发者可以直接使用他们进行手势操作。

    UIPanGestureRecognizer(拖动) UIPinchGestureRecognizer(捏合) UIRotationGestureRecognizer(旋转) UITapGestureRecognizer(点按) UILongPressGestureRecognizer(长按) ​UISwipeGestureRecognizer(轻扫)

另外,可以通过继承 UIGestureRecognizer 类,实现自定义手势(手势识别器类)。

PS:自定义手势时,需要 #import <UIKit/UIGestureRecognizerSubclass.h>,一般需实现如下方法:


- (void)reset;

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event;
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event;
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event;
- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event;
//以上方法在分类 UIGestureRecognizer (UIGestureRecognizerProtected) 中声明,更多方法声明请自行查看

UIGestureRecognizer 的继承关系如下:

IOS,手势操作,手势操作详解,七种手势操作,手势操作详细介绍

 2、手势状态

在六种手势识别中,只有一种手势是离散型手势,他就是 UITapGestureRecognizer。

离散型手势的特点就是:一旦识别就无法取消,而且只会调用一次手势操作事件(初始化手势时指定的回调方法)。

​换句话说其他五种手势是连续型手势,而连续型手势的特点就是:会多次调用手势操作事件,而且在连续手势识别后可以取消手势。从下图可以看出两者调用操作事件的次数是不同的:

IOS,手势操作,手势操作详解,七种手势操作,手势操作详细介绍

手势状态枚举如下:


typedef NS_ENUM(NSInteger, UIGestureRecognizerState) {
  UIGestureRecognizerStatePossible,  // 尚未识别是何种手势操作(但可能已经触发了触摸事件),默认状态
  UIGestureRecognizerStateBegan,   // 手势已经开始,此时已经被识别,但是这个过程中可能发生变化,手势操作尚未完成
  UIGestureRecognizerStateChanged,  // 手势状态发生转变
  UIGestureRecognizerStateEnded,   // 手势识别操作完成(此时已经松开手指)
  UIGestureRecognizerStateCancelled, // 手势被取消,恢复到默认状态
  UIGestureRecognizerStateFailed,   // 手势识别失败,恢复到默认状态
  UIGestureRecognizerStateRecognized = UIGestureRecognizerStateEnded // 手势识别完成,同UIGestureRecognizerStateEnded
};