iOS手势篇(一)-UIGestureRecognizer属性详解

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));
  1. 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外都是连续手势
  1. delegate.
    代理我们底下再讲.

  2. enabled.
    是否响应,默认YES,类似于是否响应,默认是开着的,类似于UIView的userInterfaceEnable.用户交互是否响应.一下就是用到了手势的enable属性.
    小Tips:关闭导航栏的侧滑返回

self.navigationController.interactivePopGestureRecognizer.enabled = NO;
  1. view.
    这个View是需要响应手势的View,创建好了的手势需要添加到View上才能响应手势方法(而且用户交互一定要打开,view.userInterfaceEnable = YES).

  2. cancelsTouchesInView.
    这个属性的默认值为YES.
    为YES的时候,手势处理的事件循环中的触摸事件不会发送到视图.
    为NO的时候,手势处理的事件循环中的触摸事件也会发送到视图.

举个例子: 一个UIButton有:1.点按的点下去的事件.2.Tap的手势.如果为YES的时候.只会响应Tap手势的方法.如果是NO,那么二者都响应.

  1. delaysTouchesBegan.
    默认值为NO.
    设置为NO的时候不会暂停在UITouchPhaseBegan与UITouchPhaseMoved状态的触摸事件传递到视图.
    设置为YES的时候,运行循环会暂停UITouchPhaseBegan阶段的触摸事件(UITouch)传递到视图.如果接下来能被识别为触摸事件,则丢弃这些触摸对象,如果不能识别.则会以touchesBegan或者是touchesMove来传递给视图对象(UIView)

  2. delaysTouchesEnded.
    默认值为YES.
    当为YES的时候运行循环会暂停在UITouchPhaseEnded状态的触摸事件传递到视图.
    为NO的时候.如果接下来能识别手势,就会丢弃这些触摸对象,如果不能识别.则会以touchesEnded的形式传递给视图对象.
    设置为NO的时候,手势识别器分析到相同触摸时会将UITouchPhaseEnded中的触摸对象传递到视图。

  3. allowedTouchTypes
    支持的TouchTypes.

UITouchType说明
UITouchTypeDirect用户手指的触摸
UITouchTypeIndirect间接触摸,与屏幕分离的设备产生的触摸,如Apple TV的触摸板
UITouchTypePencilApple Pencil在屏幕上产生的触摸
UITouchTypeStylus = UITouchTypePencil同上
  1. 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.)

  2. requiresExclusiveTouchType
    当设置为YES的时候,如果新的手势和旧的类型不匹配,新手势将会被手势识别器自动忽略.
    当设置为NO的时候,手势识别器会识别allowedTouchTypes里面支持类型的手势.

  3. numberOfTouches.
    当前手势中的触摸

  4. name.
    (在开发过程中,为这个唯一标识手势识别器的属性分配一个字符串。在调试代码时,可以使用此属性区分一个手势识别器和另一个手势识别器。).

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值