【发布时间】:2013-12-20 19:52:27
【问题描述】:
当 VoiceOver 在 iOS 设备上处于活动状态时,单指滑动(向左或向右)手势允许用户浏览视图中的不同元素。有没有办法检测用户在使用画外音时是否使用了单指滑动手势?
【问题讨论】:
标签: ios objective-c accessibility voiceover
当 VoiceOver 在 iOS 设备上处于活动状态时,单指滑动(向左或向右)手势允许用户浏览视图中的不同元素。有没有办法检测用户在使用画外音时是否使用了单指滑动手势?
【问题讨论】:
标签: ios objective-c accessibility voiceover
您可能会问以下两件事:
您想知道 VoiceOver 用户何时成功向 VoiceOver 发出单指向左/向右滑动手势 - VoiceOver 将从您的代码中处理(“窃取”)手势并执行其操作(将 VoiceOver 光标移动到下一个/上一个元素)。您可以获得的最接近的方法是在 VoiceOver 光标落在或离开 UIView 时收到通知(请参阅UIAccessibilityFocus protocol)。
您想让部分 UI 不受 VoiceOver 手势的影响(VoiceOver 不会处理(“窃取”)该区域中的手势),以便您可以自己检测手势(包括单指向左滑动) /right) 以标准方式处理它们,并以您想要的应用程序方式处理它们。然后您必须将UIAccessibilityTraitAllowsDirectInteraction 特征添加到accessibilityTraits 属性到相关的UIView(有关更多详细信息,请参阅UIAccessibility protocol)。使用此功能的一个突出示例是在 iOS 版 GarageBand 中 - 钢琴键盘或鼓具有此特性,因此 VoiceOver 用户可以在乐器上演奏而无需关闭 VoiceOver。
【讨论】:
我最终在 UIView 上创建了一个类别/扩展并覆盖了accessibilityElementDidBecomeFocused()。
在这里我可以获得一个全局钩子,每次可访问性状态发生变化时都会调用它。
Swift 示例:
extension UIView {
//MARK: Accessibility
override public func accessibilityElementDidBecomeFocused() {
super.accessibilityElementDidBecomeFocused()
UIApplication.sharedApplication().sendEvent(UIEvent())
}
}
【讨论】: