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

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

你可能会问两件事之一:

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

  2. 您希望使用户界面的一部分不受VoiceOver手势的限制(VoiceOver不会在该区域中处理(“窃取”)手势),以便您可以在标准中自己(包括单指滑动左/右)检测手势并以您想要的方式处理它们。 然后,您必须将UIAccessibilityTraitAllowsDirectInteraction特性添加到相关UIViewaccessibilityTraits属性(有关更多详细信息,请参阅UIAccessibility协议 )。 一个突出的例子是在GarageBand for iOS中使用 – 钢琴键盘或鼓有这个特性,这样VoiceOver用户就可以在不closuresVoiceOver的情况下在乐器上播放。

我结束了在UIView上创build一个类别/扩展,并覆盖了accessibilityElementDidBecomeFocused()。

在这里,我可以得到一个全局钩子,每当可访问状态发生变化时就会调用它。

Swift的例子:

 extension UIView { //MARK: Accessibility override public func accessibilityElementDidBecomeFocused() { super.accessibilityElementDidBecomeFocused() UIApplication.sharedApplication().sendEvent(UIEvent()) } }