Сделайте так, чтобы вид брата игнорировал любой сенсорный ввод, другой взгляд брата должен его получить - PullRequest
0 голосов
/ 07 января 2020

Я разрабатываю библиотеку Календаря, похожую на стандартное приложение iOS Календарь, Дневной обзор (повестка дня).

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

Иногда CurrentTimeIndicator, который также является составным подклассом UIView, может перекрывать Event.

И Event, и CurrentTimeIndicator имеют общее суперпредставление TimelineView.

Вместе они выглядят так:

timeline view

Когда нет CurrentTimeIndicator поверх Event, все работает нормально, и я мог вызвать события взаимодействия с пользователем, коснувшись представления. Однако когда CurrentTimeIndicator перекрывает Event, события касания, полученные индикатором, игнорируются и не передаются в базовое представление Event.

Цель состоит в том, чтобы исключить CurrentTimeIndicator из респондента. полностью цепочка, но пусть Event обрабатывает любые сенсорные события, даже если они скрыты CurrentTimeIndicator.

Иерархия просмотра: view hierarchy

И индикатор, и событие являются одноуровневыми представлениями. При нажатии на событие в выделенном касании касания не доставляются.

До сих пор я пробовал экспериментировать с userInteractionEnabled = true / false, переопределяя hitTest: withEvent: метод.

Какие существуют другие способы решения проблемы?

Ссылки на код:

Просмотр событий - создание распознавателей жестов Временная шкала - текущее время макета индикатор Индикатор текущего времени - код

Концептуально, я ищу что-то похожее на свойство zPosition CALayer, но на ощупь вход.

1 Ответ

1 голос
/ 07 января 2020

Переопределить метод pointInside в представлении CurrentTimeIndicator:

  override func point(inside point: CGPoint, with event: UIEvent?) -> Bool {
      print("Passing all touches to the next view (if any), in the view stack.")
      return false
  }

, как ответили здесь: iOS - переслать все касания через представление

...