美文网首页
手势详解

手势详解

作者: 池鹏程 | 来源:发表于2017-03-27 14:49 被阅读0次




首先要知道的是

1.这3个属性是作用于GestureRecognizers(手势识别)与触摸事件之间联系的属性。实际应用中好像很少会把它们放到一起,大多都只是运用手势识别,所以这3个属性应该很少会用到。

2.对于触摸事件,window只会有一个控件来接收touch。这个控件是首先接触到touch的并且重写了触摸事件方法(一个即可)的控件

3.手势识别和触摸事件是两个独立的事,只是可以通过这3个属性互相影响,不要混淆。

4手势是view外部来添加  ,  touch是view内部处理,两个是分开,且手势优先级比touch高

UIView *view = [gestureRecognizer view];// 这个view是手势所属的view,也就是增加手势的那个view

cancelsTouchesInView/delaysTouchesBegan/delaysTouchesEnded

(1)在默认情况下(即这3个属性都处于默认值的情况下)(这些属性是 手势对它自己的view!!!)

如果触摸window,首先由window上最先符合条件的控件(该控件记为hit-test

view)接收到该touch并触发触摸事件touchesBegan。同时如果某个控件的手势识别器接收到了该touch,就会进行识别。手势识别成功之后发送触摸事件touchesCancelled给hit-testview,hit-test

view不再响应touch。(即打断 往上传递的响应链条)

(2)cancelsTouchesInView:(默认yes)

默认为YES,这种情况下当手势识别器识别到touch之后,会发送touchesCancelled给hit-testview以取消hit-test view对touch的响应,这个时候只有手势识别器响应touch。

当设置成NO时,手势识别器识别到touch之后不会发送touchesCancelled给hit-test,这个时候手势识别器和hit-test view均响应touch。

(3)delaysTouchesBegan:(默认no)

默认是NO,这种情况下当发生一个touch时,手势识别器先捕捉到到touch,然后发给hit-testview,两者各自做出响应。

如果设置为YES,手势识别器在识别的过程中(注意是识别过程),不会将touch发给hit-test

view,即hit-testview不会有任何触摸事件。!!只有在识别失败之后才会将touch发给hit-testview,这种情况下hit-test

view的响应会延迟约0.15ms。

(4)delaysTouchesEnded:(默认yes)

默认为YES。这种情况下发生一个touch时,在手势识别成功后,发送给touchesCancelled消息给hit-testview,手势识别失败时,会延迟大概0.15ms,期间没有接收到别的touch才会发送touchesEnded。如果设置为NO,则不会延迟,即会立即发送touchesEnded以结束当前触摸。




gestureRecognizer.state  手势的6种状态

1.UIGestureRecognizerStateBegan

2.UIGestureRecognizerStateChanged

3.UIGestureRecognizerStateEnded

4.UIGestureRecognizerStateCancelled

5.UIGestureRecognizerStateFailed

6.UIGestureRecognizerStateRecognized = UIGestureRecognizerStateEnded

// 是否开启手势

- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer

同时执行手势

// 询问delegate,两个手势是否同时接收消息,返回YES同事接收。返回NO,不同是接收(如果另外一个手势返回YES,则并不能保证不同时接收消息)the default implementation returns NO。

// 这个函数一般在一个手势接收者要阻止另外一个手势接收自己的消息的时候调用

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer

// 询问delegate是否允许手势接收者接收一个touch对象

// 返回YES,则允许对这个touch对象审核,NO,则不允许。

// 这个方法在touchesBegan:withEvent:之前调用,为一个新的touch对象进行调用

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch




手势共存 与 排斥(以下是手势对手势!!)

1:[tapGesture  requireGestureRecognizerToFail:swipeGesture]

swipe判断失败后  才判断tap

2:(代理方法)-

(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer

shouldRequireFailureOfGestureRecognizer:(UIGestureRecognizer

*)otherGestureRecognizer

这里返回YES,代表跟别的手势共存;如果返回NO,不一定代表不共存(可能另一个手势返回yes就可以共存,只要两个手势任一返回yes就可以)

3:-

(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer

shouldRequireFailureOfGestureRecognizer:(UIGestureRecognizer

*)otherGestureRecognizer

另外一个手势识别fail的时候,才会识别自己

4-

(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer

shouldBeRequiredToFailByGestureRecognizer:(UIGestureRecognizer

*)otherGestureRecognizer

我被另外一个手势变成Fail

(6)button 是用这个方法发送时间(补充)

- (void)sendAction:(SEL)action to:(id)target forEvent:(UIEvent *)event

相关文章

  • IOS学习(7)-UIGestureRecognizer

    iOS开发之手势gesture详解

  • iOS 事件以及手势的处理

    iOS 事件以及手势的处理 首先引用深入浅出iOS事件机制,iOS触摸事件处理详解,详解iOS触摸事件与手势识别三...

  • iOS 侧滑返回详解

    iOS 侧滑返回详解 BBGestureBack iOS 全屏手势返回 滑动返回 pop 动画效果 这种手势主流A...

  • 手势详解

    首先要知道的是 1.这3个属性是作用于GestureRecognizers(手势识别)与触摸事件之间联系的属性。实...

  • iOS 手势详解

    手势识别 手势识别器将抽像度低的事件操作转化为更容易理解的动作,它们是附加在视图上的对象,并允许对这些动作进行回应...

  • iOS 手势详解

    前言 iOS中有很多常用的手势,比如单击、双击、缩放、拖拽等等。接下来,我为大家来一一介绍一下这些手势的使用。 正...

  • react-native实现画笔功能

    ART相关 react-native之ART 配置IOS 参考 react-native之ART绘图详解 手势相关...

  • 手势UIGestureRecognizer类详解

    前言:官方文档 概述 UIGestureRecognizer类是用于具体手势识别器的基本类。应用在添加手势识别功能...

  • View-手势详解

    MotionEvent 详解-https://www.jianshu.com/p/0c863bbde8eb Vel...

  • iOS手势识别详解

    一.UIEvent,UITouch在触摸处理中的作用 在iOS系统中,当用户手指开始接触屏幕到所有手指都离开屏幕,...

网友评论

      本文标题:手势详解

      本文链接:https://www.haomeiwen.com/subject/bqdrottx.html