好的我想要创建MULTIPLE定时器,所有定时器都在不同的时间开始(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
答案 0 :(得分:5)
NSTimer不会自动执行此操作,但将它添加到countDownDuration方法是微不足道的。例如:
-(void)countDownDuration {
MainInt -= 1;
seconds.text = [NSString stringWithFormat:@"%i", MainInt];
if (MainInt <= 0) {
[timer invalidate];
[self bringThePlayerToAnotherView];
}
}
当然你想要创建多个计时器。您可以将每个变量存储在不同的变量中,并为每个变量赋予不同的选择器。但是如果你看一下NSTimer的文档,回调方法实际上将timer对象作为选择器;你忽略了它,但你不应该这样做。
同时,您可以将任何类型的对象存储为计时器的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 *
以使事情更加清晰。