Получение настраиваемого UIView для ответа на жест прокрутки трекпада двумя пальцами (или колесо прокрутки мыши)

У меня есть приложение для iPad (на C#) с пользовательским интерфейсом UIView, который позволяет ввод с помощью касания и касаний стилусом Apple Pencil. Я пытаюсь интегрировать косвенную поддержку трекпада / мыши (курсор или "указатель", как его называет Apple).

У меня наведение работает с помощью HoverGestureRecognizer. Я получил щелчок правой кнопкой мыши и щелчок с нажатой клавишей Control, используя обычные события касания Began/Moved/Ended/Canceled и проверял наличие.type == .indirectPointer, а затем проверял, установлен ли модификатор клавиши управления в event.ModifierFlags или если event.ButtonMask == вторичный.

Я потратил много времени на поиск документации на веб-сайте Apple Developer, начиная с этого и заканчивая разветвлением:

Почему-то я не могу найти API, который система вызывает в моем коде, когда происходит прокрутка трекпада двумя пальцами (или прокрутка колесика мыши). (В другом представлении, которое является представлением прокрутки, я могу получить событие прокрутки прокрутки, когда я выполняю прокрутку двумя пальцами, поскольку это встроено в iPadOS 13.4+ для представлений прокрутки, но мое настраиваемое представление не является представлением прокрутки, оно внутри есть только несколько прокручиваемых областей.)

Что я пробовал:

  • UISwipeGestureRecognizer. Ничего не требовалось для жеста прокрутки трекпада двумя пальцами.
  • UIPanGestureRecognizer. Ничего.
  • Создание подкласса UIScrollView и добавление UIScrollViewDelegate, просто чтобы посмотреть, будет ли это работать... Ничего.
  • Создание подкласса GestureRecognizer и добавление этого, а затем переопределение ShouldReceive(UIEvent evt), но это никогда не было вызвано.

Во что iPadOS 13.4+ преобразует жест прокрутки двумя пальцами на трекпаде? Могу я получить это как какое-то мероприятие? Документация, связанная выше, довольно разочаровывающе проста, но в ней упоминается UIEvent.EventType.scroll, но не упоминается, как, когда и где система вызовет любой из моих методов с событием этого типа. Довольно бесит. Они должны просто разъяснить это более четко.

Приветствуются ответы на Swift или C#.

1 ответ

Хорошо, как ни странно, я думал, что попробовал PanGestureRecognizer, но, должно быть, я неправильно его настроил. В примере кода проекта Apple " Интеграция взаимодействий указателя в ваше приложение для iPad" был ответ (код C#):

        panRecognizer = new UIPanGestureRecognizer(() => {
            Console.WriteLine("panned -- " + panRecognizer.VelocityInView(this));
        });
        panRecognizer.AllowedScrollTypesMask = UIScrollTypeMask.Continuous;
        AddGestureRecognizer(panRecognizer);

Рад, что понял это!

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