#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 секунды.
Комментариев нет:
Отправить комментарий