когда VoiceOver включен, есть ли способ, которым приложение может обнаружить смахивание одним пальцем (влево-вправо)?

Когда VoiceOver активен на устройстве iOS, жест смахивания одним пальцем (влево или вправо) позволяет пользователям просматривать различные элементы в представлении. Есть ли способ определить, использовал ли пользователь жест смахивания одним пальцем при наложении голоса?


person 3254523    schedule 20.12.2013    source источник


Ответы (2)


Вы можете спросить одно из двух:

  1. Вы хотите знать, когда пользователь VoiceOver успешно применил жест смахивания влево / вправо одним пальцем в VoiceOver - VoiceOver обработает («украдет») жест из вашего кода и сделает свое дело (переместит курсор VoiceOver к следующему / предыдущему элементу) . Самое близкое, что вы можете получить, - это получать уведомления для UIView, когда курсор VoiceOver приземляется на него или покидает его (см. протокол UIAccessibilityFocus).

  2. Вы хотите, чтобы часть вашего пользовательского интерфейса не подвергалась жестам VoiceOver (VoiceOver не будет обрабатывать («украсть») жесты в этой области), чтобы вы могли самостоятельно определять жесты (включая смахивание одним пальцем влево / вправо) в стандартном режиме. способом и обрабатывайте их так, как вы хотите для своего приложения. Затем вы должны добавить черту UIAccessibilityTraitAllowsDirectInteraction в свойство accessibilityTraits к соответствующему UIView (см. Протокол доступности UIA для получения более подробной информации). Ярким примером того, где это используется, является GarageBand для iOS - фортепианная клавиатура или барабаны имеют эту особенность, так что пользователь VoiceOver может играть на инструментах, не выключая VoiceOver.

person Boris Dušek    schedule 20.12.2013

В итоге я создал категорию / расширение в UIView и переопределил accessibilityElementDidBecomeFocused ().

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

Быстрый пример:

extension UIView {

//MARK: Accessibility

    override public func accessibilityElementDidBecomeFocused() {
        super.accessibilityElementDidBecomeFocused()

        UIApplication.sharedApplication().sendEvent(UIEvent())
    }
}
person Harry Bloom    schedule 01.12.2016