Когда VoiceOver активен на устройстве iOS, жест смахивания одним пальцем (влево или вправо) позволяет пользователям просматривать различные элементы в представлении. Есть ли способ определить, использовал ли пользователь жест смахивания одним пальцем при наложении голоса?
когда VoiceOver включен, есть ли способ, которым приложение может обнаружить смахивание одним пальцем (влево-вправо)?
Ответы (2)
Вы можете спросить одно из двух:
Вы хотите знать, когда пользователь VoiceOver успешно применил жест смахивания влево / вправо одним пальцем в VoiceOver - VoiceOver обработает («украдет») жест из вашего кода и сделает свое дело (переместит курсор VoiceOver к следующему / предыдущему элементу) . Самое близкое, что вы можете получить, - это получать уведомления для UIView, когда курсор VoiceOver приземляется на него или покидает его (см. протокол UIAccessibilityFocus).
Вы хотите, чтобы часть вашего пользовательского интерфейса не подвергалась жестам VoiceOver (VoiceOver не будет обрабатывать («украсть») жесты в этой области), чтобы вы могли самостоятельно определять жесты (включая смахивание одним пальцем влево / вправо) в стандартном режиме. способом и обрабатывайте их так, как вы хотите для своего приложения. Затем вы должны добавить черту
UIAccessibilityTraitAllowsDirectInteraction
в свойствоaccessibilityTraits
к соответствующемуUIView
(см. Протокол доступности UIA для получения более подробной информации). Ярким примером того, где это используется, является GarageBand для iOS - фортепианная клавиатура или барабаны имеют эту особенность, так что пользователь VoiceOver может играть на инструментах, не выключая VoiceOver.
В итоге я создал категорию / расширение в UIView и переопределил accessibilityElementDidBecomeFocused ().
Здесь я могу получить глобальную ловушку, которая вызывается каждый раз при изменении состояния доступности.
Быстрый пример:
extension UIView {
//MARK: Accessibility
override public func accessibilityElementDidBecomeFocused() {
super.accessibilityElementDidBecomeFocused()
UIApplication.sharedApplication().sendEvent(UIEvent())
}
}