iOS UISlider VoiceOver Отключить высказывание значения - PullRequest
1 голос
/ 09 апреля 2019

У меня есть UISlider, который можно искать в музыке.

Клиент просит, чтобы изменение значения этого ползунка не было объявлено VoiceOver.

Теперь поведение VoiceOver по умолчанию для UISlider состоит в том, чтобы объявить процентное значение и снизить громкость музыки для этого времени. Это не хорошо для меня.

Если я изменю accessibilityValue на @"", то это создаст звуковой эффект, а также уменьшит громкость музыки. Это тоже плохо.

Я пытался использовать черты доступности UIAccessibilityTraitStartsMediaSession и UIAccessibilityTraitPlaysSound, но они не влияют на это поведение.

Что мне делать?

1 Ответ

1 голос
/ 10 апреля 2019

Использование нативного UISlider - очень хорошая практика, но не в вашем конкретном случае, потому что у вас всегда будет звуковой эффект, который вы заметили при изменении его значения.

Я предлагаю создать настраиваемый элемент доступности в пустом проекте следующим образом:

  • Сначала создайте свой слайдер в конструкторе интерфейса 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 по желанию.

Кроме того, иллюстрации и фрагменты кода (ObjC и Swift) также доступны, если вам требуется дополнительная информация для завершенияВаша реализация с VoiceOver.

...