UIGestureRecognizer手势操作
UIGestureRecognizer类手势:
iOS一共提供了6种类型的手势操作,分别为:点击、捏合、旋转、滑动、拖动、长按。手势需要添加到UIView类以及其子类之上,同时每个UIView可以添加多个手势。
6种手势分别为:
- UITapGestureRecognizer:点击
- UIPinchGestureRecognizer:捏合
- UIRotationGestureRecognizer:旋转
- UISwipeGestureRecognizer:滑动
- UIPanGestureRecognizer:拖动,其又包含另外一个子类:UIScreenEdgePanGestureRecognizer
- UILongPressGestureRecognizer:长按
手势创建的方法:
创建一个UIGestureRecognizer子类对象需要有4个步骤:
- 创建一个UIView类的对象;
- 创建一个手势类对象,并使用
- initWithTarget:action:
方法进行对象初始化,设置当手势事件发生时,调用的方法; - 为UIView对象添加手势,使用 addGestureRecognizer:方法;
- 实现手势事件发生时所调用的方法。
常用的手势属性及方法:
1.初始化手势:
– (instancetype)initWithTarget:(nullable id)target action:(nullable SEL)action;//初始化手势对象,并设置手势发生时调用的方法.
2.获取手势点击的位置
– (CGPoint)locationOfTouch:(NSUInteger)touchIndex inView:(nullable UIView*)view; // 获取手势点击的位置;
3.获取手势点击的状态和视图
@property(nonatomic,readonly) UIGestureRecognizerState state;
其中:常用的UIGestureRecognizerState有以下四种:
- UIGestureRecognizerStateBegan:开始手势事件
- UIGestureRecognizerStateEnded:结束手势事件
- UIGestureRecognizerStateChanged:手势位置发生变化
- UIGestureRecognizerStateFailed:无法识别的手势
@property(nullable, nonatomic,readonly) UIView *view; //手势事件对应的视图对象
下面简要介绍下各个手势的属性:
(一)、轻拍手势
每一个手势识别器的用法都差不多,比如UITapGestureRecognizer的使用步骤如下:
(1)创建手势识别器对象
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] init];
(2)设置手势识别器对象的具体属性
// 连续轻拍2次
tap.numberOfTapsRequired = 2;
// 需要2根手指一起触摸
tap.numberOfTouchesRequired = 2;
(3)添加手势识别器到对应的view上
[self.iconView addGestureRecognizer:tap];
(4)监听手势的触发
[tap addTarget:self action:@selector(tapIconView:)];
属性介绍:
numberOfTouchesRequired //需要多少根手指一起轻拍(默认为1根)
numberOfTapsRequired //需要轻拍多少下(默认为1)
(三)、旋转手势
UIRotationGestureRecognizer手势识别器,就像名称一样,这个类能用来监听和捕获旋转的手势,能帮助你创建出更直观的图形用户界面,比如一种场景,当你的应用中有一个展示图片的视图,用户需要通过旋转图片来调整图片的方向。
UIRotationGestureRecognizer这个类有一个rotation的属性,这个属性可以用来设置旋转的方向和旋转的弧度。旋转是从手 指的初始位置(UIGestureRecognizerStateBegan)到最终位置 (UIGestureRecognizerStateBegan)决定的。
为了对继承自UIView的UI元素进行旋转,你可以将旋转手势识别器的rotation属性传递给CGAffineTransformMakeRotation方法,以制作一个仿射转场