UITapGestureRecognizer – обнаружение двойного ИЛИ тройного крана?

У меня есть случай, когда два совершенно разных поведения должны происходить из двойного касания и тройного касания на определенном виде. Я установил его очень стандартно, с кодом ниже:

UITapGestureRecognizer *gestureRecognizerDoubleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(doubleTapDetected:)]; [gestureRecognizerDoubleTap setNumberOfTapsRequired:2]; [self.theView addGestureRecognizer:gestureRecognizerDoubleTap]; UITapGestureRecognizer *gestureRecognizerTripleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tripleTapDetected:)]; [gestureRecognizerTripleTap setNumberOfTapsRequired:3]; [self.theView addGestureRecognizer:gestureRecognizerTripleTap]; 

Проблема, с которой я сталкиваюсь, заключается в том, что если выполняется тройной отвод, метод двойного касания также срабатывает, так как он обнаруживает 2 ответвления до 3-го. Таким образом, при тройном касании вызываются оба метода.

Очевидно, что это не является неотъемлемой проблемой для кода или базового SDK, поскольку он полностью ожидается. Тем не менее, мне любопытно, есть ли у кого-нибудь умный способ каким-либо образом запретить функциональность двойного нажатия, если будет выполняться тройной щелчок? Я предполагаю, что, возможно, мне придется установить функцию двойного касания на задержанном таймере (который будет ждать секундную паузу, чтобы подтвердить, выполняется ли тройной щелчок), но я не уверен, есть ли лучший способ или даже лучший способ установить такую ​​вещь в чистом виде?

Заранее благодарю за любой совет, который вы можете предложить по этому поводу!

Вы можете использовать requireGestureRecognizerToFail: для этой проблемы:

 UITapGestureRecognizer *gestureRecognizerTripleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tripleTapDetected:)]; [gestureRecognizerTripleTap setNumberOfTapsRequired:3]; [self.theView addGestureRecognizer:gestureRecognizerTripleTap]; UITapGestureRecognizer *gestureRecognizerDoubleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(doubleTapDetected:)]; [gestureRecognizerDoubleTap requireGestureRecognizerToFail:gestureRecognizerTripleTap]; [gestureRecognizerDoubleTap setNumberOfTapsRequired:2]; [self.theView addGestureRecognizer:gestureRecognizerDoubleTap]; 

Двойной щелчок не срабатывает, если только тройной контакт не срабатывает.

Ссылка на класс , как обычно, содержит некоторую дополнительную информацию и упоминает этот сценарий как прекрасное время для использования этого метода.

Как насчет создания 2 распознавателей, для 1 и 2 ответчиков соответственно (настройте их через numberOfTapsRequired ). Это, очевидно, позаботится об обнаружении 1 и 2 кранов. Чтобы обнаружить 3 крана, вы можете проверить, был ли сразу же обнаружен распознаватель 1-крана после 2-кратного.


Кстати, пока я не знаю, что делает ваша заявка, наличие как тройных, так и двойных жестов повода кажется потенциальной проблемой удобства использования. Тройной кран сам по себе не является общеизвестным способом взаимодействия с приложением. Я бы, по крайней мере, рассмотрел длинную прессу, а не тройной кран. Это полностью уклонится от этой технической проблемы 🙂

  • как узнать, был ли UITapGestureRecognizer добавлен в subview
  • Кнопка крана и длинный жест нажатия
  • Форма Xamarin: множественные TapGestureRecognizers не работают на IOS
  • UITapGestureRecognizer в заголовке UICollectionView не работает?
  • Как распознать нажатие на весь осциллирующий SubView для выполнения интерактивной анимации
  • отмена повторного удержания жесты жесткого диска
  • UITapGestureRecognizer не запускает UIImageView, созданный программно
  • Непризнанный селектор UITapGestureRecognizer, отправленный в экземпляр
  • UITapGestureRecognizer работает с UIImageView, но не на UILabel
  • UITapGestureRecognizer вмешивается в UISlider
  • Как нажать для увеличения и двойного нажатия, чтобы уменьшить масштаб в iOS?
  • Interesting Posts

    Как получить код страны с помощью NSLocale в Swift 3

    iOS JSON Ошибка: NSDebugDescription = Мусор в конце

    Блоки iOS Асинхронные обратные вызовы, вызывающие сбои после просмотра контроллера, освобождаются

    Как извлечь цвета из UIImage с помощью Swift

    Производительность Javascript в UIWebView не в текущем ViewController с iOS 8

    В раскадровке, как создать пользовательскую ячейку для использования с несколькими контроллерами?

    ParentViewController становится нулевым, не знает, где и как

    Отображать видео внутри Uiwebview не в полноэкранном режиме устройства

    AVAudioSession управляет звуковым выходом

    Откройте страницу FB Photo в приложении Facebook из каналов в другом приложении – iOS

    Проверка наличия контакта в контактном приложении (Swift)

    Как поместить текст над узлом в scenekit?

    Передача LocalStorage при установке плагина cordova-plugin-wkwebview-engine

    Поддерживает ли iPad файл: // протокол?

    Проблема с CFArrayRef и NSArray при рисовании градиента с использованием ARC

    Давайте будем гением компьютера.