iOS UISlider VoiceOver禁用说话值

问题描述 投票:1回答:1

我有一个可以寻求音乐的UISlider

客户要求VoiceOver不公布此滑块的值更改。

现在,UISlider的VoiceOver的默认行为是宣布百分比值并降低当时的音乐音量。这对我不好。

如果我将accessibilityValue更改为@"",那么它会产生声音效果并降低音量。这也很糟糕。

我尝试使用UIAccessibilityTraitStartsMediaSessionUIAccessibilityTraitPlaysSound可访问性特征,但它们不会影响这种行为。

我该怎么办?

ios accessibility uislider voiceover audio-player
1个回答
1
投票

使用原生的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)。

© www.soinside.com 2019 - 2024. All rights reserved.