Как настроить изменение громкости звука с помощью ползунка для MPNowPlayingInfoCenter - PullRequest
0 голосов
/ 03 августа 2020

Я получаю значение звука из audioSession и помещаю его в слайдер. Но как я могу сделать наоборот? Если я передаю значение из ползунка в player.volume, громкость изменится, но затем, когда MPNowPlayingInfoCenter запущен, эти изменения в нем не видны. И если я изменяю громкость с помощью аппаратных кнопок, изменения также не видны в слайдере. Мне нужно связать все изменения громкости в одно. Так что когда я меняю значение ползунка, звук в MPNowPlayingInfoCenter меняется. Спасибо за любой совет. Мой код:

...
var outputVolumeObserve: NSKeyValueObservation?
let audioSession = AVAudioSession.sharedInstance()

func listenVolumeButton() {
        do {
            try audioSession.setActive(true)
        } catch {}

        outputVolumeObserve = audioSession.observe(\.outputVolume) { (audioSession, changes) in
            self.volumeSlider.value = audioSession.outputVolume
        }
    }

@IBAction func handleVolumeSlider(_ sender: Any) {
        player.volume = volumeSlider.value
   }

1 Ответ

0 голосов
/ 03 августа 2020

Я решил проблему, изменив значение громкости MPVolumeView:

extension MPVolumeView {
    static func setVolume(_ volume: Float) {
        let volumeView = MPVolumeView()
        let slider = volumeView.subviews.first(where: { $0 is UISlider }) as? UISlider

        DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 0.01) {
            slider?.value = volume
        }
    }
}

...
@IBAction func handleVolumeSlider(_ sender: Any) {
        MPVolumeView.setVolume(volumeSlider.value)
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...