1.属性
@property(nonatomic,readonly) UIGestureRecognizerState state;
@property(nullable,nonatomic,weak) id <UIGestureRecognizerDelegate> delegate;
@property(nonatomic, getter=isEnabled) BOOL enabled;
@property(nullable, nonatomic,readonly) UIView *view;
@property(nonatomic) BOOL cancelsTouchesInView;
@property(nonatomic) BOOL delaysTouchesBegan;
@property(nonatomic) BOOL delaysTouchesEnded;
@property(nonatomic, copy) NSArray<NSNumber *> *allowedTouchTypes NS_AVAILABLE_IOS(9_0);
@property(nonatomic, copy) NSArray<NSNumber *> *allowedPressTypes NS_AVAILABLE_IOS(9_0);
@property (nonatomic) BOOL requiresExclusiveTouchType NS_AVAILABLE_IOS(9_2);
@property(nonatomic, readonly) NSUInteger numberOfTouches;
@property (nullable, nonatomic, copy) NSString *name API_AVAILABLE(ios(11.0), tvos(11.0));
- state
UIGestureRecognizerState | 说明 |
---|---|
UIGestureRecognizerStatePossible | 识别器尚未识别其手势,可能正在计算触摸事件,也就是手势相应之前的状态(默认状态). |
UIGestureRecognizerStateBegan | 识别器识别手势到手势的开始,将会在下次运行循环(runloop)中调用. |
UIGestureRecognizerStateChanged | 识别器识别到手势变化,将会在下次运行循环(runloop)中调用. |
UIGestureRecognizerStateEnded | 识别器已经接收到被识别为手势结束的触摸。 action method(我们写的触摸事件的响应方法)将在下一轮运行循环中调用,识别器将会将state重置为UIGestureRecognizerStatePossible状态. |
UIGestureRecognizerStateCancelled | 识别器已经接收到导致取消手势的触摸。 action method(我们写的触摸事件的响应方法)将在下一轮运行循环中调用。 识别器将会将state重置为UIGestureRecognizerStatePossible状态. |
UIGestureRecognizerStateFailed | 识别器识别失败状态。 不会调用action(我们写的触摸事件的响应方法)方法,识别器将会将state重置为UIGestureRecognizerStatePossible状态. |
UIGestureRecognizerStateRecognized = UIGestureRecognizerStateEnded | 识别器已经接收到被识别为手势的触摸。 action method(我们写的触摸事件的响应方法)将在下一轮运行循环中调用,识别器将会将state重置为UIGestureRecognizerStatePossible状态. |
// 离散手势 - 识别离散事件但不报告更改(例如,点按(UIPanGestureRecognizer))的手势识别器不会通过“已开始”和“已更改”状态转换,也不会失败或被取消
iOS系统中只有UITapGestureRecgnier是离散手势。离散手势只会触发一次,而且一旦识别就无法取消。
既然有离散手势,那么
手势分类 | 说明 | 实例 |
---|---|---|
离散手势 | 离散手势只会触发一次,而且一旦识别就无法取消。 | UITapGestureRecgnier |
连续手势 | 连续手势会一直向action method发送消息,告诉值改变了 | 除UITapGestureRecgnier外都是连续手势 |
-
delegate.
代理我们底下再讲. -
enabled.
是否响应,默认YES,类似于是否响应,默认是开着的,类似于UIView的userInterfaceEnable.用户交互是否响应.一下就是用到了手势的enable属性.
小Tips:关闭导航栏的侧滑返回
self.navigationController.interactivePopGestureRecognizer.enabled = NO;
-
view.
这个View是需要响应手势的View,创建好了的手势需要添加到View上才能响应手势方法(而且用户交互一定要打开,view.userInterfaceEnable = YES). -
cancelsTouchesInView.
这个属性的默认值为YES.
为YES的时候,手势处理的事件循环中的触摸事件不会发送到视图.
为NO的时候,手势处理的事件循环中的触摸事件也会发送到视图.
举个例子: 一个UIButton有:1.点按的点下去的事件.2.Tap的手势.如果为YES的时候.只会响应Tap手势的方法.如果是NO,那么二者都响应.
-
delaysTouchesBegan.
默认值为NO.
设置为NO的时候不会暂停在UITouchPhaseBegan与UITouchPhaseMoved状态的触摸事件传递到视图.
设置为YES的时候,运行循环会暂停UITouchPhaseBegan阶段的触摸事件(UITouch)传递到视图.如果接下来能被识别为触摸事件,则丢弃这些触摸对象,如果不能识别.则会以touchesBegan或者是touchesMove来传递给视图对象(UIView) -
delaysTouchesEnded.
默认值为YES.
当为YES的时候运行循环会暂停在UITouchPhaseEnded状态的触摸事件传递到视图.
为NO的时候.如果接下来能识别手势,就会丢弃这些触摸对象,如果不能识别.则会以touchesEnded的形式传递给视图对象.
设置为NO的时候,手势识别器分析到相同触摸时会将UITouchPhaseEnded中的触摸对象传递到视图。 -
allowedTouchTypes
支持的TouchTypes.
UITouchType | 说明 |
---|---|
UITouchTypeDirect | 用户手指的触摸 |
UITouchTypeIndirect | 间接触摸,与屏幕分离的设备产生的触摸,如Apple TV的触摸板 |
UITouchTypePencil | Apple Pencil在屏幕上产生的触摸 |
UITouchTypeStylus = UITouchTypePencil | 同上 |
-
allowedPressTypes.
支持的UIPress属性.
这个在iOS设备上一般用不到,一般在TV OS的开发用得到,比如那个遥控器的点按力度之类的.
**注:**按压事件发生在,游戏控制器(通俗点说就是手柄),apple TV的遥控器,或者是其他有物理按键的设备上/(Press events represent interactions with a game controller, AppleTV remote, or other device that has physical buttons. You can determine the type of an event using the type and subtype properties.) -
requiresExclusiveTouchType
当设置为YES的时候,如果新的手势和旧的类型不匹配,新手势将会被手势识别器自动忽略.
当设置为NO的时候,手势识别器会识别allowedTouchTypes里面支持类型的手势. -
numberOfTouches.
当前手势中的触摸 -
name.
(在开发过程中,为这个唯一标识手势识别器的属性分配一个字符串。在调试代码时,可以使用此属性区分一个手势识别器和另一个手势识别器。).