Как отменить/сбросить UIGestureRecognizer

как я могу отменить или сбросить 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;
    }
}

Спасибо за помощь!


person Manni    schedule 06.07.2011    source источник


Ответы (3)


Я понял! :-)

Может кто еще сталкивался с этой проблемой, вот решение:

if (waitForSomething) {
    recognizer.enabled = NO;
    recognizer.enabled = YES;
    return;
}

Следующим событием будет UIGestureRecognizerStateFailed, за которым следует UIGestureRecognizerStateBegan.

person Manni    schedule 06.07.2011
comment
Это отличный совет, и Apple даже рекомендовала его в недавнем видео WWDC. - person Tim Arnold; 13.09.2014

Свифт 4:

if waitForSomething {
    recognizer.isEnabled = false
    recognizer.isEnabled = true
    return
}
person Milan Nosáľ    schedule 26.09.2017

Если вам нужно сделать это более чем в одном месте:

в Свифте

extension UIGestureRecognizer
{
    func cancel() {
        isEnabled = false
        isEnabled = true
    }
}
person Rand    schedule 06.02.2019