Я пытаюсь добавить таймер в свою игру, чтобы пользователь знал, сколько времени он потратил, играя на уровне. Я понял, что могу инициализировать таймер следующим образом:
bool showTimer = YES;
NSDate startDate;
UILabel timerLabel; // initialized in viewDidLoad
-(void) showElapsedTime: (NSTimer *) timer {
if (showTimer) {
NSTimeInterval timeSinceStart;
if(!startDate) {
startDate = [NSDate date];
}
timeSinceStart = [[NSDate date] timeIntervalSinceDate:startDate];
NSString *intervalString = [NSString stringWithFormat:@"%.0f",timeSinceStart];
timerLabel.text = intervalString;
if(stopTimer) {//base case
[timer invalidate];
}
}
}
- (void) startPolling {
[NSTimer scheduledTimerWithTimeInterval:0.1f target:self selector:@selector(showElapsedTime:) userInfo:nil repeats:YES];
}
Я запускаю метод startPolling в viewDidLoad. Когда я запускаю приложение, я вижу таймер, и он отслеживает время, но когда я выхожу из приложения и снова вхожу в него, таймер не останавливается. Я также не уверен, как справиться с переходом в другое представление (например, меню параметров), а затем возвращаться к этому представлению. Я понимаю NSDefaults и NSCoding и вижу, как можно сохранить текущее значение в таймере как объект кодирования, сохраняя отдельную пару ключ-значение в списке для каждого уровня, но это кажется громоздким.
Есть ли лучший способ отслеживать, сколько времени пользователь проводит на уровне?