当VoiceOver打开时,应用程序是否可以检测到单指(左右)滑动?

325*_*523 2 accessibility objective-c ios voiceover

当VoiceOver在iOS设备上处于活动状态时,单指滑动(左或右)手势允许用户浏览视图中的不同元素.有没有办法检测用户在使用画外音时是否使用了单指滑动手势?

Bor*_*šek 9

您可能会问以下两种情况之一:

  1. 您想知道VoiceOver用户何时成功向VoiceOver发出单指滑动左/右手势 - VoiceOver将处理("窃取")您的代码中的手势并执行其操作(将VoiceOver光标移动到下一个/上一个元素) .您可以获得的最接近的是当VoiceOver光标落在或离开它时获取UIView的通知(请参阅UIAccessibilityFocus协议).

  2. 您希望使UI的一部分不受VoiceOver手势的影响(VoiceOver不会在此区域处理("窃取")手势),以便您可以在标准中自行检测手势(包括单指左右滑动)以您希望的方式为您的应用程序处理和处理它们.然后,您必须将该UIAccessibilityTraitAllowsDirectInteraction特性添加accessibilityTraits到相关属性UIView(有关详细信息,请参阅UIAccessibility协议).使用它的一个突出例子是在GarageBand for iOS中 - 钢琴键盘或鼓具有这种特性,因此VoiceOver用户可以在不关闭VoiceOver的情况下在乐器上演奏.


Har*_*oom 5

我最终在 UIView 上创建了一个类别/扩展并覆盖了accessibilityElementDidBecomeFocused()。

在这里我可以获得一个全局钩子,每次可访问性状态发生变化时都会调用该钩子。

斯威夫特的例子:

extension UIView {

//MARK: Accessibility

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

        UIApplication.sharedApplication().sendEvent(UIEvent())
    }
}
Run Code Online (Sandbox Code Playgroud)