Как система событий tap действительно работает в IOS?

Есть 3 способа (о которых я знаю) взаимодействовать с тапом в IOS:

  • переопределить низкоуровневые методы UIResponder, такие как touchesBegin()
  • используйте UITapGestureRecognizer(цель: действие:)
  • если это тип UIControl, используйте addTarget(target:action:for:)

и пара логических значений для управления поведением

  • UIResponder::canBecomeFirstResponder
  • UIView:: isUserInteractionEnabled

У меня проблемы с тем, как я могу понять, как они работают вместе, поэтому я немного поэкспериментировал. Я создал простую цепочку респондента:

UIView (A) -> UIButton (B)

и я попытался перевернуть логические значения и добавить различные обработчики событий, вот мой вывод:

  1. canBecomeFirstResponder ни на что не влияет, даже если я установил, что он возвращает false, событие перехватывается и распространяется по цепочке как обычно. Итак, мой первый вопрос: что именно контролирует canBecomeFirstResponder?

  2. в соответствии с этим документом

Если для свойства isUserInteractionEnabled установлено значение false, события касания, нажатия, клавиатуры и фокуса, предназначенные для представления, игнорируются и удаляются из очереди событий.

Но в моем эксперименте isUserInteractionEnabled - это переключатель, чтобы отключить UIResponder на B(UIButton) и позволить следующему респонденту (A) перехватить событие. Таким образом, событие не "игнорируется", а распространяется вверх по цепочке.

  1. В этом документе также сказано, что

Реализация по умолчанию функции touchesBegin() направляет сообщение вверх по цепочке респондента.

В моем эксперименте функция touchesBegin() всегда вызывается перед распознавателем жестов (что имеет смысл, потому что касание не распознается, пока вы не поднимаете палец), но событие перехватывается только B, а не A.

Заранее спасибо!

0 ответов

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