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