Получение настраиваемого 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);
Рад, что понял это!