Чтобы получить объем, вам нужно будет использовать AVAudioSession.sharedInstance().outputVolume
, как вы уже использовали.
Чтобы пользователь мог контролировать громкость, вам нужно взглянуть на MPVolumeView
, найденный в платформе Media Player. Этот компонент может вносить изменения в системный том.
Очень просто использовать:
let volumeView = MPVolumeView(frame: volumeViewSize)
playerView.addSubview(volumeView)
Вы захотите использовать этот класс вместо своего экземпляра UISlider
. Существуют методы, которые позволяют переопределить внешний вид слайдера.
Кроме того, этот класс предоставляет элемент управления, который позволяет пользователю выбирать выходной маршрут (например, iPhone, Airpods, Homepod или Apple TV). Вы можете отключить ползунок или элемент управления выходным маршрутом, так что это дает вам довольно широкий набор опций для настройки вашего пользовательского интерфейса.
Если вы работаете с раскадровкой, вам нужно будет добавить ее в код. Сначала создайте пустой UIView
в представлении контроллера представления на раскадровке и присоедините его к контроллеру представления:
Как только вы добавите это, вы захотите что-то вроде следующего в вашем контроллере вида:
@IBOutlet var volumeSliderContainer: UIView!
private lazy var volumeView: MPVolumeView = {
let volumeView = MPVolumeView(frame: volumeSliderContainer.bounds)
volumeView.showsVolumeSlider = true
volumeView.showsRouteButton = true
volumeView.translatesAutoresizingMaskIntoConstraints = false
return volumeView
}()
override func viewDidLoad() {
super.viewDidLoad()
volumeSliderContainer.addSubview(volumeView)
NSLayoutConstraint.activate([
volumeView.widthAnchor.constraint(equalTo: volumeSliderContainer.widthAnchor),
volumeView.heightAnchor.constraint(equalTo: volumeSliderContainer.heightAnchor),
volumeView.centerXAnchor.constraint(equalTo: volumeSliderContainer.centerXAnchor),
volumeView.centerYAnchor.constraint(equalTo: volumeSliderContainer.centerYAnchor),
])
}
Теперь вы сможете взаимодействовать с MPVolumeView
, как вам требуется.
Просто следите за симулятором, компонент не будет отображать слайдер, и вы сможете увидеть его только при запуске приложения на реальном устройстве.