#ios #swift #время
Есть ViewController с AVAudioPlayer. Нужно показать на экране текущее время трека
и время до окончания.
Мой код:
@IBAction func play(sender: AnyObject) {
if !audioPlayer.isPlaying{
audioPlayer.play()
slider.maximumValue = Float(audioPlayer.duration)
slider.value = 0.0
timer = Timer(timeInterval: 1.0, target: self, selector: #selector(self.updateTime),
userInfo: nil, repeats: true)
RunLoop.main.add(timer!, forMode: .commonModes)
}
}
func updateTime() {
let currentTime = Int(audioPlayer.currentTime)
let minutes = currentTime/60
let seconds = currentTime - minutes * 60
timeElapsed.text = NSString(format: "%02d:%02d", minutes,seconds) as String
}
Проблема в том, что иногда timeElapsed прибавляет несколько секунд сразу, а иногда
одну. Как правильно показать на экране текущее время трека и время до окончания трека?
Ответы
Ответ 1
Проблема таймера в том, что он не совсем точно отсчитывает заданный интервал. Он срабатывает, когда у системы есть свободные ресурсы в примерно необходимое время. В принципе, оно для человека и незаметно, но когда Вы запускаете проигрыватель и одновременно с ним таймер, возможно и возникает ситуация, что пошла уже вторая секунда песни, а таймер немного запоздал. Попробуйте просто изменить интервал таймера с 1 на 0.5 секунды.
Комментариев нет:
Отправить комментарий