Как получить правильные координаты экрана из UITapGestureRecognizer, когда VoiceOver включен - PullRequest
1 голос
/ 25 апреля 2019

В настоящее время я работаю над интерактивным представлением, которое в значительной степени зависит от местоположения касания пользователя.Я обнаружил, что есть несколько способов взаимодействия с UITapGestureRecognizer, когда VoiceOver включен, но когда я нажимаю на мою точку, приведенные значения очень неверны.Я искал в другом месте, но мой вариант использования выходит за рамки нормы, так что не так много, чтобы сказать мне, что происходит.Кто-нибудь испытывал это раньше?

Я знаю, что могу изменить accessibilityTrait на UIAccessibilityTraitAllowsDirectInteraction, что даст мне правильную точку экрана при использовании, но я хотел бы знать, что вызывает эту проблему, по крайней мере, радизнания.Чтобы взаимодействовать с UITapGestureRecognizer, я либо дважды нажимаю, либо делаю 3D-прикосновение, сильно нажимая на экран.Лестничный метод не работает для жеста касания, но будет работать для жеста панорамирования.

Это единственная линия, которую я использую для получения очков на экране.Мой вид карты - UIImageView

CGPoint screenPoint = [tapGesture locationInView:map];

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

Без включения VoiceOver я получил бы результат: (35.500, 154.363)

При включенном VoiceOver и касании, как правило, в одном месте, я получаю: (187.500, 197.682)

Точка, которую я использую для проверки, находится в левой части экрана, а результат включения VoiceOver - в середине экрана.Я полагаю, что значение оси Y, возможно, изменилось из-за размера моей панели инструментов, но я понятия не имею, что выбрасывает значение оси X.Если потребуется дополнительная информация, дайте мне знать.

ОБНОВЛЕНИЕ: После дальнейшего изучения выясняется, что UITapGestureRecognizer всегда будет возвращаться (187.500, 197.682), независимо от того, где я касаюсь вида карты, когда включен VoiceOver.,Эта точка выглядит как середина вида карты.Как ни странно, но UIPanGestureRecognizer даст мне правильное (x, y) для моего обзора, если я буду использовать 3D Touch, когда VoiceOver включен.

В примечании, не касающемся рассматриваемой проблемы, кажется, что если я использую черту доступности UIAccessibilityTraitAllowsDirectInteraction, метод UIAccessibilityConvertFrameToScreenCoordinates возвращает кадр, который выше моего представления.Это прекрасно работает, если я не изменю черту.

1 Ответ

0 голосов
/ 26 апреля 2019

Ваша проблема может касаться контрольной точки, используемой, когда VoiceOver включен.Проверьте, к чему относятся ваши координаты точки: координаты вида или экрана?

Я предлагаю вам взглянуть на следующие элементы:

В соответствии с вашим проектом предыдущие элементы могут быть интересны для достижения ваших целей.

...