我有一个UISlider
可以在音乐中寻找。
客户请求VoiceOver
不宣布此滑块的值更改。
现在UISlider
的VoiceOver的默认行为是宣布该百分比值并降低该时间的音乐音量。这对我不好。
如果将accessibilityValue
更改为@""
,则会产生声音效果并降低音乐音量。这也很糟糕。
我尝试使用UIAccessibilityTraitStartsMediaSession
和UIAccessibilityTraitPlaysSound
可访问性特征,但它们不会影响这种行为。
我该怎么办?
答案 0 :(得分:1)
使用原生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)
}
}
在视图控制器中引入辅助功能元素,以使用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的实现,也可以使用illustrations and code snippets (ObjC和Swift)。