Ok. I'm trying to change volume by my custom UISlider.
I have Player (ViewController), and inside I can see videos from Youtube, so also have control buttons and volume Slider !
I couldn't even imagine that it won't be that easy. Why!?
I find with solution of course with MPVolumeView. But in debug area it writes - '[MediaRemote] No local output device available:'
I've looked through a lot of webpages. So because I'm beginner I can't figure out how to implement it in the right way.
Please, see my code below and tell me pls where I'm wrong or not complete ?!
I understand I'm wrong, but can't guess where. I have too little experience yet. But I'm trying hard.
. See details from code (if need some more, pls tell me) .
lazy var soundSlider: UISlider = {
let slider = UISlider()
slider.minimumTrackTintColor = .white
slider.maximumTrackTintColor = #colorLiteral(red: 0.8039215803, green: 0.8039215803, blue: 0.8039215803, alpha: 0.7)
slider.setThumbImage(UIImage(named: "Round_Thumb_VolumeBar"), for: .normal)
slider.translatesAutoresizingMaskIntoConstraints = false
slider.addTarget(self, action: #selector(handleVolumeSliderChange), for: .valueChanged)
return slider
}()
@objc func handleVolumeSliderChange() {
print(soundSlider.value)
MPVolumeView.setVolume(soundSlider.value)
}
override func viewDidLoad() {
super.viewDidLoad()
view.addSubview(soundSlider)
soundSlider.leadingAnchor.constraint(equalTo: soundMinButton.trailingAnchor, constant: 10).isActive = true
soundSlider.trailingAnchor.constraint(equalTo: soundMaxButton.leadingAnchor, constant: -10).isActive = true
soundSlider.topAnchor.constraint(equalTo: pausePlayButton.bottomAnchor, constant: 43).isActive = true
}
extension MPVolumeView {
static func setVolume(_ volume: Float) {
let volumeView = MPVolumeView()
let volumeSlider = volumeView.subviews.first(where: { $0 is UISlider }) as? UISlider
DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 0.01) {
volumeSlider?.value = volume
}
}
}