Да, у вас правильная идея с accessibilityActivate
и accessibilityActivationPoint
.Обратите внимание, что для того, чтобы он работал, accessibilityActivationPoint
должна быть точкой внутри элемента управления, которую вы пытаетесь активировать в экранных координатах (используйте функцию convert
!).
Я думаю, что короткий ответ «да», чтобы ответить на ваш второй вопрос, но просто для того, чтобы устранить путаницу в том, когда Точка активации доступности полезна, я более подробно расскажу об этом.
По умолчанию (то есть поведение по умолчанию для AcessibilityActivate()
), когда VoiceOver активирует любой вид, VoiceOver отправляет «жест касания» в центр вида.Положение этого «жеста касания» можно изменить, обновив атрибут accessibilityActivationPoint
в представлении.Ниже у меня есть пример того, как можно использовать это свойство.
Допустим, у вас есть пустая кнопка (на рисунке ниже кнопка представляет собой серый прямоугольник) рядом с текстом:
![Screenshot of text next to a button without text on it.](https://i.stack.imgur.com/ETZgO.png)
В целях доступности, вы можете захотеть сделать весь вид, который содержит кнопку, и текст Элементом доступности (чтобы пользователи VoiceOver могли легко понять, что кнопкасвязан с текстом "Worldspace Attest").На изображении ниже я использую Accessibility Inspector, чтобы показать, что представление, содержащее оба эти элемента, является элементом Accessibility.
![Image showing that the view holding the text and button is VoiceOver focusable.](https://i.stack.imgur.com/KICQL.png)
Обратите внимание на эти изображениячто кнопка находится не в центре обзора, а справа.Когда вы активируете этот вид с помощью VoiceOver, он не будет выбирать кнопку;вместо этого он отправит «нажатие» в центр представления (что аналогично нажатию на текст, который ничего не делает).Чтобы выбрать кнопку, вы должны установить accessibilityActivationPoint
вида в качестве экранных координат кнопки:
view.accessibilityActivationPoint = self.convert(button.center, to: UIApplication.shared.windows.first)
Это должно сделать так, чтобы эта кнопкаможет использоваться пользователем VoiceOver.
Надеюсь, эта информация прояснит любую путаницу в свойстве точки активации специальных возможностей.Пример, который я использовал выше, можно найти в этом репозитории в демонстрационной версии «Active Control Name».