Для получения обновлений менее секунды интервал таймера должен быть <1. Но точность NSTimer составляет всего около 50 мс, поэтому <code>scheduledTimerWithTimeInterval:0.01 не будет работать.
Кроме того, таймер может быть задержан из-за различных действий, поэтому использование timeSeconds
приведет к неточной синхронизации. Обычный способ - сравнить NSDate с датой запуска таймера. Однако, поскольку этот код предназначен для игры, текущий подход может вызвать меньше разочарования у игроков, особенно. если программа или фоновые процессы потребляют много ресурсов.
Первое, что нужно сделать, - это преобразовать countdownTimer в субсекундный интервал.
countdownTimer = [NSTimer scheduledTimerWithTimeInterval:0.67 target:self selector:@selector(updateTimerLabel) userInfo:nil repeats:YES];
Тогда не отсчитывайте время по секундам, а по центам:
if(appDelegate.gameStateRunning == YES){
if(gameVarLevel==1){
timeCentiseconds = 10000;
AllowResetTimer = NO;
}
}
timeCentiseconds -= 67;
Наконец, разделите на 100 в выводе:
timerLabel.text=[NSString stringWithFormat:@"Time: %d.%02d", timeCentiseconds/100, timeCentiseconds%100];
В качестве альтернативы используйте double
:
double timeSeconds;
...
if(appDelegate.gameStateRunning == YES){
if(gameVarLevel==1){
timeSeconds = 100;
AllowResetTimer = NO;
}
}
timeSeconds -= 0.67;
timerLabel.text=[NSString stringWithFormat:@"Time: %.2g", timeSeconds];