Страницы

Поиск по вопросам

среда, 18 декабря 2019 г.

Swift: AVAudioPlayer время трека

#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 секунды.

Комментариев нет:

Отправить комментарий