我正在编写一个非常简单的游戏,专门为盲人用户设计,但也可能被有视力的用户使用。它使用许多按钮作为元素,但是盲人用户通过自定义手势(平移,轻击等)与这些按钮进行交互,因此标准的画外音交互是不合适的。
问题在于,屏幕上根本没有可访问性对象,因此,每当游戏加载时,画外音就会开始读取按钮上的标签(例如,“可能的文本:后退,菜单...”。)不论是否启用了它们,都将被读取。对于盲人用户,我也无法从视图中删除其中的大多数。
我尝试关闭元素的可访问性,取消选中可访问性特征中的“按钮”,所有内容都允许选择直接交互,我尝试了.accessibilityElementsHidden,来自How do you exclude a UIButton from VoiceOver?的所有建议,似乎没有任何作用。 / p>
我当前的解决方案具有一个清晰的UILabel,其中没有文本,将其设置为.accessibilityElements数组中的唯一项,然后出于良好的考虑,我发布了一个具有该标签作为对象的可访问性屏幕更改通知,因此它变为焦点,然后在调用后在异步的分发队列中等待一秒钟,完全删除标签,然后将焦点设置回主视图,以便用户可以进行交互。
这是我当前解决方案的一个示例:
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
self.accessibilityElements = [lblVoiceOver!]
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
UIAccessibility.post(notification: .screenChanged, argument: lblVoiceOver)
DispatchQueue.main.asyncAfter(deadline: .now() + 1.0) {
self.lblVoiceOver.removeFromSuperview()
UIAccessibility.post(notification: .screenChanged, argument: self.view)
}
}
这充其量是一个愚蠢的破解,我很想实现一个真正的解决方案,该解决方案只是防止画外音读取“可能的文本”。我相信iOS 11中已添加了可能的文本功能,以帮助那些未考虑可访问性的应用程序对可访问性更加友好,但到目前为止,我还没有找到关闭此功能的方法。
答案 0 :(得分:1)
问题在于,屏幕上根本没有可访问性对象。
如果要达到此目的,只需在视图控制器中写self.view.accessibilityElementsHidden = true
,该控制器将不再包含VoiceOver的可访问元素:这将表明content of your container isn't accessible。
盲用户通过自定义手势(平移,轻击等)与这些按钮进行交互,因此标准配音交互是不合适的。我想实现一种真正的解决方案,该解决方案只是防止“可能的文本”通过旁白阅读。
...按照上述原理,您应防止VoiceOver分析和读取视图中的任何内容。