1.UIGestureRecognizer 的子类,开发时可以直接调用
UIPanGestureRecognizer(拖动)
UIPinchGestureRecognizer(捏合)
UIRotationGestureRecognizer(旋转)
UITapGestureRecognizer(点按)
UILongPressGestureRecognizer(长按)
UISwipeGestureRecognizer(轻扫)
当然,如果继承UIGestureRecognizer也可以自定义手势。
自定义手势时,需要 #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) 中声明,更多方法声明请自行查看
2.UIGestureRecognizer 的继承关系
3.手势状态
手势分为离散型和连续型手势,在以上6种的手势中,只有UITapGestureRecognizer(点按)是离散型手势,即一旦识别就无法取消,而且只会调用一次操作事件。
而离散型手势会多次调用操作事件,并且可以被取消。
手势被识别的过程状态如下:
typedef NS_ENUM(NSInteger, UIGestureRecognizerState) {
UIGestureRecognizerStatePossible, // 尚未识别是何种手势操作(但可能已经触发了触摸事件),默认状态
UIGestureRecognizerStateBegan, // 手势已经开始,此时已经被识别,但是这个过程中可能发生变化,手势操作尚未完成
UIGestureRecognizerStateChanged, // 手势状态发生转变
UIGestureRecognizerStateEnded, // 手势识别操作完成(此时已经松开手指)
UIGestureRecognizerStateCancelled, // 手势被取消,恢复到默认状态
UIGestureRecognizerStateFailed, // 手势识别失败,恢复到默认状态
UIGestureRecognizerStateRecognized = UIGestureRecognizerStateEnded // 手势识别完成,同UIGestureRecognizerStateEnded
};
4.使用手势的步骤
使用手势很简单,分为三步:
1.创建手势识别器对象实例。创建时,指定一个回调方法,当手势开始,改变、或结束时,执行回调方法。
2.设置手势识别器对象实例的相关属性(可选部分)
3.添加到需要识别的 View 中。每个手势只对应一个 View,当屏幕触摸在 View 的边界内时,如果手势和预定的一样,那就会执行回调方法。
PS:一个手势只能对应一个 View,但是一个 View 可以有多个手势。建议在真机上测试这些手势,模拟器操作不太方便,可能导致认为手势失效的情况。(模拟器测试捏合和旋转手势时,按住 option 键,再用触摸板或鼠标操作)
@property (nonatomic, strong) UISwipeGestureRecognizer *leftSwipeGestureRecognizer;
- (void)addGestureRecognizer {
//第一步,创建滑动手势并且初始化
self.leftSwipeGestureRecognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(rightItemTapped)];
//设置滑动手势是向左滑动时触发
self.leftSwipeGestureRecognizer.direction = UISwipeGestureRecognizerDirectionLeft;
//给视图添加上手势
[self.view addGestureRecognizer:self.leftSwipeGestureRecognizer];
}
网友评论