我已经创建了一个倒数计时器并且效果很好..但是当它达到零时它继续倒计时..所以它显示-1,-2,-3等。我该如何阻止它这样做? / p>
这是我的实现文件代码..
@implementation ViewController
-(IBAction)start {
myTicker = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(showActivity) userInfo:nil repeats:YES];
}
-(IBAction)stop {
[myTicker invalidate];
}
-(IBAction)reset {
time.text = @"0";
}
-(void)showActivity {
int currentTime = [time.text intValue];
int newTime = currentTime -1;
time.text = [NSString stringWithFormat:@"%d", newTime];
}
我猜我在某个地方遗漏了一些代码?
答案 0 :(得分:0)
快速解决方法是改变:
int newTime = currentTime - 1;
成:
int newTime = (currentTime > 0) ? currentTime - 1 : 0;
这将使倒数计时器停止在零以下。如果这就是你所需要的,那就足够了。
不会关闭计时器或在达到零时执行操作。为此,您需要在上面的行之后添加类似下面的块:
if ((currentTime > 0) && (newTime ==0)) {
// optionally turn off timer
fireZeroEvent ();
}
并提供fireZeroEvent()
函数来执行您需要执行的操作。
我说可选关闭计时器,因为您可能希望让它保持运行,这样您只需设置time.text
即可重新开始倒计时,而无需重新创建计时器。
由于这个原因,fireZeroEvent()
仅在从1到0的转换时调用,而不是每次定时器在达到零后触发。