Ошибка при быстром нажатии кнопки звукаIOS

Программируем под IOS
Ответить
Anonymous
 Ошибка при быстром нажатии кнопки звука

Сообщение Anonymous »

У меня есть кнопка переключения громкости. Когда нажимаю кнопку, то вызывается пауза или плей с некоторым затуханием. Проблема в том, что если я быстро дважды нажму кнопку, например, паузы, а затем воспроизведения, то услышу скачок громкости. Более того, если я быстро вызову 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «IOS»