mgv mgv - 5 months ago 447
iOS Question

iOS 9: How to change volume programmatically without showing system sound bar popup?

I have to change volume on iPad and using this code:

[[MPMusicPlayerController applicationMusicPlayer] setVolume:0];


But this changing volume and showing system volume bar on iPad. How to change the sound without showing the volume bar?

I know,
setVolume:
is deprecated, and everybody says to use
MPVolumeView
. If this is the only way to solve my problem, then how to change the volume using
MPVolumeView
? I don't see any method in
MPVolumeView
that changes the sound.
Should I use some another classes together with
MPVolumeView
?

But it's preferable to use
MPMusicPlayerController
.

Thank you in advice!

Answer

MPVolumeView has a slider, and by changing the value of the slider, you can change the device volume. I wrote an MPVolumeView extension to easily access the slider:

extension MPVolumeView {
    var volumeSlider:UISlider {
        self.showsRouteButton = false
        self.showsVolumeSlider = false
        self.hidden = true
        var slider = UISlider()
        for subview in self.subviews {
            if subview.isKindOfClass(UISlider){
                slider = subview as! UISlider
                slider.continuous = false
                (subview as! UISlider).value = AVAudioSession.sharedInstance().outputVolume
                return slider
            }
        }
        return slider
    }
}
Comments