18

当用户单击我的视图时,我需要一种特定的方法来运行。当用户双击时,我需要另一种方法。

问题是双击触发了单击,它在我的逻辑中引入了错误。我不能使用 UIGestureRecognizer 因为我需要跟踪点。

我尝试了一些布尔值,但没有机会。我也尝试了取消/执行选择延迟技术,但它不起作用(这很奇怪,因为其他论坛上的其他人说它有效,也许模拟器触摸检测不同?)

我试图让用户设置棋子的位置(拖动、旋转),但我需要注意棋子的交叉点、剪辑到棋盘区域等,这就是为什么简单的布尔值不能解决问题的原因。

提前致谢!

4

4 回答 4

45

检查这个,看起来你在找什么:

下面的代码使用 UITapGestureRecognizer 来处理单击和双击。该代码被设计为如果我们得到双击事件,它不会触发单击事件。诀窍是使用 requireGestureRecognizerToFail 要求单击手势等待双击事件在触发之前失败。因此,当用户点击屏幕时,单击手势识别器不会触发事件,直到双击手势识别器。如果双击手势识别器识别到该事件,它将触发双击事件并跳过单击事件,否则将触发单击事件。

    UITapGestureRecognizer *doubleTapGestureRecognizer = [[UITapGestureRecognizer alloc]
                            initWithTarget:self action:@selector(handleDoubleTap:)];
    doubleTapGestureRecognizer.numberOfTapsRequired = 2;

    //tapGestureRecognizer.delegate = self;
    [self addGestureRecognizer:doubleTapGestureRecognizer];

    //
    UITapGestureRecognizer *singleTapGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleSingleTap:)];
    singleTapGestureRecognizer.numberOfTapsRequired = 1;

    [singleTapGestureRecognizer requireGestureRecognizerToFail: doubleTapGestureRecognizer];
    //tapGestureRecognizer.delegate = self;
    [self addGestureRecognizer:singleTapGestureRecognizer];

可能我不明白您所说的“我需要跟踪点”是什么意思,但我认为使用手势识别器执行此操作没有任何问题。

于 2011-07-05T18:58:10.040 回答
4

斯威夫特 3 解决方案:

doubleTap = UITapGestureRecognizer(target: self, action:#selector(self.doubleTapAction(_:)))
doubleTap.numberOfTapsRequired = 2


singleTap = UITapGestureRecognizer(target: self, action:#selector(self.singleTapAction(_:)))
singleTap.numberOfTapsRequired = 1

singleTap.require(toFail: doubleTap)

self.view.addGestureRecognizer(doubletap)
self.view.addGestureRecognizer(singleTap)

在代码行singleTap.require(toFail: doubleTap)中,我们强制单击等待并确保单击甚至不是双击。这意味着我们要求确保双击事件失败,因此它被认为是单击。

于 2016-10-27T13:08:02.790 回答
1

快速解决方案:

    doubleTapSmall1.numberOfTapsRequired = 2
    doubleTapSmall1.addTarget(self, action: "doubleTapPic1")
    smallProfilePic1.addGestureRecognizer(doubleTapSmall1)

    singleTapSmall1.numberOfTapsRequired = 1
    singleTapSmall1.addTarget(self, action: "singleTapPic1")
    singleTapSmall1.requireGestureRecognizerToFail(doubleTapSmall1)
    smallProfilePic1.addGestureRecognizer(singleTapSmall1)
于 2015-09-10T10:12:53.557 回答
0

只需通过正确设置委托来实现 UIGestureRecognizer 委托方法。

 - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch{
            return  YES;
        }

    - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer{
        return YES;
    }

还要添加这行代码

[singleTap requireGestureRecognizerToFail:doubleTap];
于 2017-05-10T13:48:35.707 回答