如何取消/重置UIGestureRecognizer

19

我如何取消或重置UIGestureRecognizer?问题是,如果我在手势过程中将waitForSomething设置为NO,则下一个事件是UIGestureRecognizerStateChanged。但第一个事件应该是UIGestureRecognizerStateBegan

我的代码:

- (void) panned:(UIPanGestureRecognizer *) recognizer {
    if (waitForSomething) {
        // cancel or reset the recognizer!
        // because the next event should be UIGestureRecognizerStateBegan and not UIGestureRecognizerStateChanged
        return;
    }

    switch (recognizer.state) {
        case UIGestureRecognizerStateBegan:
            // important initialisation code
            break;

        case UIGestureRecognizerStateChanged:
            // do something
            break;
    }
}

非常感谢你的帮助!

3个回答

42

我懂了! :-)

也许其他人会遇到这个问题,这里是解决方案:

if (waitForSomething) {
    recognizer.enabled = NO;
    recognizer.enabled = YES;
    return;
}
下一个事件将是UIGestureRecognizerStateFailed并紧随其后的是UIGestureRecognizerStateBegan

4
这是一个很好的提示,甚至在最近的WWDC视频中被苹果推荐。 - Tim Arnold

0

Swift 4:

if waitForSomething {
    recognizer.isEnabled = false
    recognizer.isEnabled = true
    return
}

0
如果您需要在多个地方执行此操作:
在Swift中
extension UIGestureRecognizer
{
    func cancel() {
        isEnabled = false
        isEnabled = true
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接