У меня есть кнопка переключения громкости. Когда нажимаю кнопку, то вызывается пауза или плей с некоторым затуханием. Проблема в том, что если я быстро дважды нажму кнопку, например, паузы, а затем воспроизведения, то услышу скачок громкости. Более того, если я быстро вызову play, а потом резко нажму и вызову паузу, то в режиме воспроизведения звук остановится из-за вызова DispatchQueue с задержкой. Как это исправить?
ViewController:
class ViewController: UIViewController {
@objc func soundState() {
if defaults.string(forKey: "sound") == "false" {
audio.pause(volume: 0.0, duration: 3.0)
} else if defaults.string(forKey: "sound") == "true" {
audio.play(volume: 1.0, duration: 3.0)
}
}
}
Аудиоконтроллер:
class Audio: NSObject, AVAudioPlayerDelegate {
var audioPlayer: AVAudioPlayer!
func loopedAudio(fileName: String, fileExtension: String) {
try? AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategorySoloAmbient)
try? AVAudioSession.sharedInstance().setActive(true)
let url = Bundle.main.url(forResource: fileName, withExtension: fileExtension)
do {
audioPlayer = try AVAudioPlayer(contentsOf: url!)
audioPlayer.prepareToPlay()
audioPlayer.delegate = self
audioPlayer.numberOfLoops = -1
} catch {
print("error")
}
}
func play(volume: Float, duration: Double) {
audioPlayer.volume = 0
audioPlayer.play()
audioPlayer.setVolume(volume, fadeDuration: duration)
}
func pause(volume: Float, duration: Double) {
audioPlayer.volume = 1
audioPlayer.setVolume(volume, fadeDuration: duration)
DispatchQueue.main.asyncAfter(deadline: .now() + duration) {
self.audioPlayer.pause()
}
}
}
Подробнее здесь: https://stackoverflow.com/questions/793 ... on-quickly