iOS - 多次点击手势识别器

Posted

技术标签:

【中文标题】iOS - 多次点击手势识别器【英文标题】:iOS - Multiple Tap gesture recognizers 【发布时间】:2012-12-13 19:02:47 【问题描述】:

在我的应用程序中,我必须检测单次、双击和三次轻击。所以,我正在使用 UITapGestureRecognizer。我正在使用以下代码:

    UITapGestureRecognizer *oneTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleSingleTapGestureOnAnimal:)];
    oneTap.numberOfTapsRequired = 1;

    UITapGestureRecognizer *doubleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleDoubleTapGestureOnAnimal:)];
    doubleTap.numberOfTapsRequired = 2;
    [doubleTap requireGestureRecognizerToFail:oneTap];

    UITapGestureRecognizer* tripleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTripleTapGestureOnAnimal:)];
    tripleTap.numberOfTapsRequired = 3;
    [tripleTap requireGestureRecognizerToFail:doubleTap];

    [self addGestureRecognizer:oneTap];
    [self addGestureRecognizer:doubleTap];
    [self addGestureRecognizer:tripleTap];

但问题是它总是只检测单击和双击。它根本没有检测到三次点击....有人可以指出我在检测三次点击时所犯的错误吗?

【问题讨论】:

【参考方案1】:

检查一下,

[oneTap requireGestureRecognizerToFail:doubleTap];
[oneTap requireGestureRecognizerToFail:tripleTap];
[doubleTap requireGestureRecognizerToFail:tripleTap];

你已经切换了方法中的水龙头,你没有做上面的第二行。理想情况下,只有在双击和三次敲击失败时才应检测到一次敲击。并且当三次点击失败时应该检测到双击。

【讨论】:

仍然没有检测到三次点击 @Satyamsvv,如果你注释掉另外两个gestureRecognizers,它工作吗? @Satyamsvv,有更新吗?是否检测到其他两个未添加到自身时?这应该有效。如果它不起作用,则问题与其他问题有关。 不,它仍然无法正常工作。这是该类中编写的唯一代码,它是 UIImageView 的子视图。 @Satyamsvv,这很奇怪。如果那是唯一的手势,那么它也没有检测到吗?与其他两个手势有什么不同吗?你在把上面的权利之前删除了其他行吗?检查此***.com/questions/9243868/…。他们正在添加 3 个轻按手势。【参考方案2】:

将您的 2 个 requireGestureRecognizerToFail 调用更改为:

[oneTap requireGestureRecognizerToFail:tripleTap];
[oneTap requireGestureRecognizerToFail:doubleTap];
[doubleTap requireGestureRecognizerToFail:tripleTap];  

【讨论】:

仍然没有检测到三次点击 我创建了一个测试项目,它工作正常。在你看来,也许还有其他东西在弄乱手势。尝试创建一个只有一个视图的项目并添加三个手势,您会发现它是正确的。你认为还有什么?我可以尝试提供帮助。 我创建了一个继承自 UIImageView 的类并处理该类中的点击(如描述中所述)。

以上是关于iOS - 多次点击手势识别器的主要内容,如果未能解决你的问题,请参考以下文章

iOS Swift - 使点击手势识别器在视图下工作

使用点击手势识别器时,IOS swift应用程序无法正常工作

如何实现检测点击事件的全局手势识别器?

iOS/ObjC:“后备”轻击手势识别器?

iOS图形手势识别框架SGGestureRecognizer

如果将点击手势识别器添加到其背景视图中,则不会调用 iOS didSelectItemAtIndexPath