当VoiceOver打开时,有没有一种方法可以让应用程序检测到单指(左右)滑动



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

您可能会问两件事中的任何一件:

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

  2. 你想让你的UI的一部分不受VoiceOver手势的影响(VoiceOver不会在这个区域处理("窃取")手势),这样你就可以用标准的方式自己检测手势(包括单指向左/向右滑动),并以你想要的应用方式处理它们。然后,您必须将UIAccessibilityTraitAllowsDirectInteraction特征添加到相关UIViewaccessibilityTraits属性(有关更多详细信息,请参阅UIAccessibility协议)。这一点的一个突出例子是iOS版的GarageBand-钢琴键盘或鼓具有这一特性,因此VoiceOver用户可以在不关闭VoiceOver的情况下演奏乐器。

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

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

Swift示例:

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

最新更新