Как создать таймер обратного отсчета в xcode 4.5
Хорошо, я хочу создать НЕСКОЛЬКО таймеров, которые все запускаются в разное время (25, 50,1 мин, 1 мин 30 с...), но я не знаю, как остановить его, когда он достигнет 0 и когда он достигнет нуля, приведите "Игрок" в другой вид.
Вот мой.h файл
@interface ViewController :UIViewController {
IBOutlet UILabel *seconds;
NSTimer *timer;
int MainInt;
}
@end
И вот мой файл.m
@implementation ViewController
-(void)countDownDuration {
MainInt -= 1;
seconds.text = [NSString stringWithFormat:@"%i", MainInt];
}
-(IBAction)start:(id)sender {
MainInt = 25;
timer = [NSTimer scheduledTimerWithTimeInterval:1.0
target:self
selector:@selector(countDownDuration)
userInfo:nil
repeats:YES];
}
@end
1 ответ
NSTimer не делает этого автоматически, но добавить его в ваш метод countDownDuration просто. Например:
-(void)countDownDuration {
MainInt -= 1;
seconds.text = [NSString stringWithFormat:@"%i", MainInt];
if (MainInt <= 0) {
[timer invalidate];
[self bringThePlayerToAnotherView];
}
}
Конечно, вы хотите создать несколько таймеров. Вы можете сохранить каждый из них в другой переменной и назначить каждому другой селектор. Но если вы посмотрите на документацию по NSTimer, метод обратного вызова фактически принимает объект таймера в качестве селектора; Вы игнорируете это, но не должны быть.
А между тем, вы можете сохранить объект любого типа в качестве userInfo для таймера, так что это хорошее место для хранения отдельного текущего значения обратного отсчета для каждого таймера.
Итак, вы можете сделать что-то вроде этого:
-(void)countDownDuration:(NSTimer *)timer {
int countdown = [[timer userInfo] reduceCountdown];
seconds.text = [NSString stringWithFormat:@"%i", countdown];
if (countdown <= 0) {
[timer invalidate];
[self bringThePlayerToAnotherView];
}
}
-(IBAction)start:(id)sender {
id userInfo = [[MyCountdownClass alloc] initWithCountdown:25];
timer = [NSTimer scheduledTimerWithTimeInterval:1.0
target:self
selector:@selector(countDownDuration:)
userInfo:userInfo
repeats:YES];
}
Я оставил некоторые детали неписанными (например, определение MyCountdownClass
- который должен включать метод initWithCountdown:
а также reduceCountdown
что делать правильно), но все они должны быть довольно простыми. (Кроме того, по-видимому, вы хотите, чтобы userInfo сохранял больше, чем просто значение обратного отсчета - например, если каждый таймер отправляет проигрыватель в другое представление, вы должны также спрятать представление там.)
PS, обратите внимание, что вам сейчас нужно @selector(countDownDuration:)
, Новички в ObjC все время облажаются. countDownDuration:
а также countDownDuration
совершенно не связанные селекторы.
PPS, полное определение MyCountdownClass
должен быть виден в countDownDuration:
(если у вас нет другого класса с такими же селекторами). Вы можете явно привести результат userInfo
в MyCountdownClass *
чтобы прояснить ситуацию.