iOS UISlider VoiceOver 禁用说出值

标签 ios accessibility uislider voiceover audio-player

我有一个可以在音乐中搜索的 UISlider

客户要求不通过 VoiceOver 通知此 slider 的值更改。

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

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

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

我该怎么办?

最佳答案

使用 native UISlider 是一种很好的做法,但不适用于您的特定用例,因为当它的值发生变化时,您总是会听到您注意到的声音效果。

我建议创建一个 custom accessibility element在一个空白项目中如下:

  • 首先,在 Xcode 界面构建器中创建您的 slider ,并通过一个导出连接到您的 View Controller 。
  • 实现将代表您的 slider 的 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)
        }
    }
    
  • 在 View Controller 中引入辅助功能元素,以使用 VoiceOver 模拟物理 slider 。

    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]
        }
    }
    

我允许您在项目中调整传入的参数和与音乐播放的连接,但照原样, slider 值的变化不会由 VoiceOver 发出声音

此外,illustrations and code snippets (ObjC 和 Swift) 如果您需要更多信息以使用 VoiceOver 完成实现,也可以使用。

关于iOS UISlider VoiceOver 禁用说出值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55588964/

相关文章:

ios - 防止 UIPageViewController 的滑动影响 UISlider

jquery 范围 slider 值到查询字符串

ios - 我可以在 Swift 应用程序中引用 Ada 库吗?

c - 在 Chrome 中查找包含 URL 的辅助功能元素

html - 如何使仅包含图像的按钮可访问?

html - 屏幕阅读器如何从 HTML 中读取元素

ios - 如何将坐标原点设置为左侧和底部uiview

ios - 如何以编程方式更改选定的选项卡?

iOS:特定标签的自定义字体

ios - 当 slider 具有极端最大值时,UISlider MaximumTrackImage 剪辑