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-кратного.


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

  • shouldReceiveTouch в UITableViewCellContentView
  • UITapGestureRecognizer вмешивается в UISlider
  • UIPanGestureRecognizer и UITapGestureRecognizer одновременно
  • как обнаружить нажатие на UIWebView, если это не ссылка
  • UITapGestureRecognizer запускается только для начальной области UIScrollView
  • передать параметр UITapGestureRecognizer
  • Добавить жест нажатия к части UILabel
  • Как определить индивидуальный просмотр одного клика и двойного клика в iOS?
  • hitTest: WithEvent и Subviews
  • Обнаружение местоположения касания в UIImage, который находится в scrollview
  • Разница между UITapGestureRecognizer и addTarget
  • Давайте будем гением компьютера.