Разница между UITapGestureRecognizer и addTarget

Кто-нибудь может прояснить разницу между этими двумя способами запуска функции при нажатии на представление?

1)myView.addTarget(self, action: #selector(myFunctionToTrigger(_:)), forControlEvents: UIControlEvents.TouchUpInside)

2)let tapGesture = UITapGestureRecognizer(target: self, action: #selector(myFunctionToTrigger(_:))) myView.addGestureRecognizer(tapGesture)

5 ответов

Это 2 совершенно разных способа реализации обработки пользовательских событий в приложениях iOS.

1). addTarget() - это метод на UIControl класс, который является частью механизма целевого действия. Подробнее об этом в документации.

И ты не можешь addTarget малыш UIView, только для того, чтобы UIControl подклассы.

2). UIGestureRecognizer Подклассы - это просто механизм, позволяющий обнаруживать и различать жесты пользователя в конкретном представлении.

Основное различие между ними в том, что распознаватели жестов могут обнаруживать более сложные события, такие как пролистывание, сжатие или масштабирование, но -addTarget это очень эффективный способ обнаружения активности пользователей, а также обеспечивает одинаковый уровень интерфейса для всех UIControlтакие как UISegmetedControl, UISlider, так далее.

Надеюсь, что я тебе помог.

Эти два метода работают на двух разных уровнях абстракции:

  • addTarget:action:forControlEvents это нижний уровень, который обеспечивает изолированные события. Некоторые из этих событий должны быть объединены и интерпретированы для обнаружения более сложных жестов, таких как смахивание или сжимание.
  • addGestureRecognizer работает на более высоком уровне ближе к тому, что обычно требуется приложению. Он добавляет специальное средство распознавания жестов, которое прослушивает события низкого уровня, обнаруживает жесты и доставляет конкретную информацию о жесте.

В случае крана разница незначительна. Но когда речь идет о смахивании, сжимании и комбинации касания, смахивания, сжимания (например, в приложении для просмотра изображений или в приложении карты), один или несколько распознавателей жестов являются подходящим способом.

Вот разница

За UITapGestureRecognizer Вы можете добавить событие для указанных жестов, таких как UITapGestureRecognizer, UIPanGestureRecognizer... и много других жестов.

Где как UIViewaddTarget() Вы можете добавить цель для указанных событий, таких как UIControlEvents.TouchUpInside.. и много других событий.

Ответ Павла верный, вы можете добавить только цель в UIControlView, который является подклассом UIView. UIGestureRecognizer может быть добавлен в любой UIView.

Ответ Кодо о том, что цель находится на более низком уровне, чем жест, неверен, жесты - это поддержка касаний более низкого уровня. UIControl использует жесты, чтобы заставить addTarget:action:forControlEvents работать.

Есть несколько преимуществ для addTarget:

  1. Это встроенная функция. Вам не нужно инициализировать другой объект, чтобы сделать то же самое.
  2. Вы можете указать, когда реагировать на действие: "touchUpInside" или "touchDown" (или "valueChanged" для ползунков).
  3. Вы можете установить различные виды кнопки (например, текст заголовка, цвет заголовка, изображение содержимого, фоновое изображение, оттенок подсветки), и кнопка отображает эти состояния только при использовании addTarget.

Помимо вышеперечисленных преимуществ, я думаю, что это больше похоже на соглашение о кодировании элементов UIControl.

Другие вопросы по тегам