как отображать секунды с помощью nstimer? - PullRequest
2 голосов
/ 27 мая 2011

Я работаю над игровым проектом.Мне нужно знать, что, как я могу отобразить секунды, когда игра начинается до конца игры?также необходимо отобразить в формате «00:01».дополнительно, если время выходит за пределы 60 минут, то также должны отображаться часы «1:00:01»

какие-либо указания?

Спасибо ...

Ответы [ 3 ]

7 голосов
/ 27 мая 2011

После объединения ответов Натана и Марка метод полного таймера может выглядеть примерно так:

- (void)timer:(NSTimer *)timer {
    NSInteger secondsSinceStart = (NSInteger)[[NSDate date] timeIntervalSinceDate:startDate];

    NSInteger seconds = secondsSinceStart % 60;
    NSInteger minutes = (secondsSinceStart / 60) % 60;
    NSInteger hours = secondsSinceStart / (60 * 60);
    NSString *result = nil;
    if (hours > 0) {
        result = [NSString stringWithFormat:@"%02d:%02d:%02d", hours, minutes, seconds];
    }
    else {
        result = [NSString stringWithFormat:@"%02d:%02d", minutes, seconds];        
    }
    // set result as label.text
}

когда вы запускаете игру, вы устанавливаете startDate и запускаете таймер следующим образом:

self.startDate = [NSDate date];
timer = [NSTimer scheduledTimerWithTimeInterval:0.25 target:self selector:@selector(timer:) userInfo:nil repeats:YES];

при остановке игры вы используете это:

self.startDate = nil;
[timer invalidate];
timer = nil;
1 голос
/ 27 мая 2011

NSTimeInterval t = 10000;printf ("% 02d:% 02d:% 02d \ n", (int) t / (60 * 60), ((int) t / 60)% 60, ((int) t)% 60);

выводит 02: 46: 40

если вы хотите получить секунды с десятичными точками, тогда вам немного сложнее использовать mode ().

1 голос
/ 27 мая 2011

Вы можете запланировать повторяющийся таймер, который срабатывает каждую секунду, при его запуске вызывается метод, который обновляет ваше отображение времени:

[NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(timerFireMethod:) userInfo:nil repeats:YES];

Затем в методе обновления

- (void)timerFireMethod:(NSTimer*)theTimer {
    //remove a second from the display
}

Вы захотите установить таймер на атрибут, чтобы он мог быть признан недействительным по окончании.

...