ios - iOS UISlider VoiceOver 禁用说值
问题描述
我有一个UISlider
可以在音乐中寻找的东西。
客户要求不公布此滑块的值更改VoiceOver
。
现在 VoiceOver 的默认行为UISlider
是宣布百分比值并降低该时间的音乐音量。这对我不好。
如果我将 更改accessibilityValue
为@""
,那么它会产生声音效果并降低音乐音量。这也很糟糕。
我尝试使用UIAccessibilityTraitStartsMediaSession
和UIAccessibilityTraitPlaysSound
可访问性特征,但它们不会影响这种行为。
我应该怎么办?
解决方案
使用本机UISlider
是一种非常好的做法,但不适用于您的特定用例,因为当它的值发生变化时,您将始终拥有您注意到的声音效果。
我建议在空白项目中创建自定义可访问性元素,如下所示:
- 首先,在 Xcode 界面构建器中创建滑块,并使用与视图控制器的插座连接。
实现一个
UIAccessibilityElement
代表您的滑块的子类。class a11yMySlider: UIAccessibilityElement { var minimumValue = 0.0 var maximumValue = 10.0 var value = 5.0 var theSlider = UISlider() init(in container: Any, with slider: UISlider) { super.init(accessibilityContainer: container) theSlider = slider } override var accessibilityTraits: UIAccessibilityTraits { get { return UIAccessibilityTraitAdjustable } set { } } override func accessibilityDecrement() { value -= (value == minimumValue) ? 0.0 : 1.0 theSlider.value = Float(value) } override func accessibilityIncrement() { value += (value == maximumValue) ? 0.0 : 1.0 theSlider.value = Float(value) } }
在视图控制器中引入辅助功能元素以使用 VoiceOver 模拟物理滑块。
class SliderNoSoundViewController: UIViewController { @IBOutlet weak var mySlider: MySlider! override func viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated) let a11yElt = a11yMySlider.init(in: self.view, with: mySlider) a11yElt.accessibilityFrame = mySlider.frame self.view.accessibilityElements = [a11yElt] } }
我让您调整传入的参数以及与项目内音乐播放的连接,但实际上,VoiceOver 不会根据需要发声滑块值的变化。
此外,如果您需要更多信息来完成 VoiceOver 的实施,还可以使用插图和代码片段 (ObjC 和 Swift) 。
推荐阅读
- javascript - 如何阻止我的模式追加新行?
- java - Java Dice Game - 关于“目标”数字的问题
- pandas - 熊猫创建具有固定数据类型的数据框
- marklogic - Marklogic如何排除xml中的多个节点
- coq - 霍尔三重记法
- python - 来自 struct.unpack 的 IPv6 地址格式
- dart - 创建自己的 Flutter 小部件最佳实践
- ssis - SSIS中的存储过程与SQL语句执行SQL任务和完整的结果集
- pandas - 如何将 Pandas 数据框列转换为 bin 字符串数据?
- java - fetchInto 时 JOOQ 记录中的字段未排列