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, поскольку он полностью ожидается. Тем не менее, мне любопытно, есть ли у кого-нибудь умный способ каким-либо образом запретить функциональность двойного нажатия, если будет выполняться тройной щелчок? Я предполагаю, что, возможно, мне придется установить функцию двойного касания на задержанном таймере (который будет ждать секундную паузу, чтобы подтвердить, выполняется ли тройной щелчок), но я не уверен, есть ли лучший способ или даже лучший способ установить такую ​​вещь в чистом виде?

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

2 Solutions collect form web for “UITapGestureRecognizer – обнаружение двойного ИЛИ тройного крана?”

Вы можете использовать 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 разрывает UITableView didSelectRowAtIndexPath
  • Непризнанный селектор, отправленный в экземпляр Swift 3
  • передать параметр UITapGestureRecognizer
  • Нажмите «Жест» на части UILabel
  • Как я могу обнаружить ответвления на определенной части (подстроке) UILabel?
  • iOS 9: Распознаватель жестов был настроен в раскадровке / xib для добавления к нескольким представлениям (не работает)
  • UITapGestureRecognizer с целью - Swift
  • Нажмите на UISlider для установки значения
  • UITapGestureRecognizer не запускает UIImageView, созданный программно
  • UITapGestureRecognizer работает с UIImageView, но не на UILabel
  • Получение жестов в родительском представлении AVPlayer
  • Interesting Posts

    Xcode: как конвертировать MP4-файл в аудиофайл

    UIImageView игнорирует ограничения AutoLayout в UITableViewCell

    в Objective-C, как получить доступ к частной собственности из категории

    не может найти имя настраиваемого шрифта, добавленного в xcode 7

    Приложение iPhone зависает при выборе TableViewCell – с перерывами, после паузы / перерыва

    iOS 11 предпочитает LargeTitles, не обновляющийся до прокрутки

    Как настроить неконкретизированные классы в Objective-C (классы с помощью только методов)

    Xcode 4.5 с iOS 6 на Snow Leopard

    Представление UIAlertController из UITableViewCell

    Запись и воспроизведение аудио на Ionic 3

    «Команда / usr / sbin / chown не удалось с кодом выхода 1» при архивировании

    Обнаруживать изменение SIM-карты или найти IMSI на SIM-карте с помощью официального SDK для iOS?

    Профилирование производительности пользовательского интерфейса iOS

    Отключить Google Analytics в iOS-симуляторе

    Не удается запустить iPhone-симулятор – файл «Журналы» не удалось сохранить

    PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.