关于多种手势问题

关于多种手势,区分的问题。

 

IOS 中常有的手势:

 

1.单击手势,双击搜索     Tap

2.长按手势                     Long

3.划动手势               Swipe

4.旋转手势                     Rotation

5.捏合手势              Pinch

6.拖动手势                     Pan

 

关于多种手势识别,区分的问题。

 

/////特别强调下,在一个对象上面同时有 单击手势  双击手势 的时候

如何区分 它们了?

 

最简单的办法:(此方法用来设置优先级)

[singleTapGesture requireGestureRecognizerToFail:doubleTapGesture];

 

说明上面的方法: 只有 双击手势 识别失败后,则 才识别 单击手势。

 

以此来设置优先级。区分不同的手势。

 

参考博文:

http://www.winddisk.com/2012/10/17/detect_double_tap_single_tap/

http://blog.csdn.net/likendsl/article/details/7554150

 

/////下面的内容很重要,对于区分手势

 

不过有些手势是关联的,怎么办呢?例如 Tap 与 LongPress、Swipe与 Pan,或是 Tap 一次与Tap 兩次。

手势识别是具有互斥的原则的,比如单击和双击,如果它识别出一种手势,其后的手势将不被识别。所以对于关联手势,要做特殊处理以帮助程序甄别,应该把当前手势归结到哪一类手势里面。

比如,单击和双击并存时,如果不做处理,它就只能发送出单击的消息。为了能够识别出双击手势,就需要做一个特殊处理逻辑,即先判断手势是否是双击,在双击失效的情况下作为单击手势处理。使用

[A requireGestureRecognizerToFail:B]函数,它可以指定当A手势发生时,即便A已经滿足条件了,也不会立刻触发,会等到指定的手势B确定失败之后才触发。

 

可能会遇到的问题

 

http://blog.sina.com.cn/s/blog_bf9eee6f0101izxh.html

 

////////////////很重要

首先让UITapGestureRecognizer不要吃掉子窗口的事件:

tapGesture.cancelsTouchesInView = NO; (这是一个比较关键的问题)然后设置自身的代理:tapGesture.delegate = self;最后实现代理里面这个方法:// called before touchesBegan:withEvent: is called on the gesture recognizer for a new touch. return NO to prevent the gesture recognizer from seeing this touch- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch{        // 过滤掉UIButton,也可以是其他类型    if ( [touch.view isKindOfClass:[UIButton class]])    {        return NO;    }        return YES;}

原文地址:https://www.cnblogs.com/kevingod/p/3375488.html