我有一个可以寻求音乐的UISlider
。
客户要求VoiceOver
不公布此滑块的值更改。
现在,UISlider
的VoiceOver的默认行为是宣布百分比值并降低当时的音乐音量。这对我不好。
如果我将accessibilityValue
更改为@""
,那么它会产生声音效果并降低音量。这也很糟糕。
我尝试使用UIAccessibilityTraitStartsMediaSession
和UIAccessibilityTraitPlaysSound
可访问性特征,但它们不会影响这种行为。
我该怎么办?
使用原生的UISlider
是一种非常好的做法,但不是在你的特定用例中,因为当它的值发生变化时,你总会得到你注意到的声音效果。
我建议在空白项目中创建一个custom accessibility element如下:
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)
}
}
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的实施,还可以使用illustrations and code snippets(ObjC和Swift)。