Таймеры не очень точные. Там точность составляет около 0,05 секунды, я думаю. И если процесс требует много энергии, ваш таймер будет еще более замедлен. Решение может состоять в том, чтобы сэкономить время, когда вы запускаете свой таймер, и что каждый раз, когда ваш таймер срабатывает, вы выполняете математическую операцию, чтобы узнать, сколько прошло времени:
class YourClass {
var startTime : TimeInterval!
//...
func configureTimer() {
startTime = Date().timeIntervalSinceReferenceDate //You add this line
elapsingTime = 0.0
timer?.invalidate()
DispatchQueue.main.async {
self.timer = Timer.scheduledTimer(withTimeInterval: 0.01, repeats: true, block: { [weak self] timer in
guard let self = self else { return }
self.elapsingTime = Date().timeIntervalSinceReferenceDate - self.startTime //You change this one
self.questionView.configureProgressBar(totalTime: self.totalTime, elapsingTime: self.elapsingTime)
self.questionView.videoQuestionPlayer.player?.play()
if Int(self.elapsingTime) == Int(self.totalTime) {
self.timer!.invalidate()
self.isTimeExpired = true
self.sendAnswer(index: -1)
}
})
}
}
}