我正在尝试创建“秒表”类型功能。我有一个标签(显示已用时间)和两个按钮(启动和停止计时器)。开始和停止按钮分别调用startTimer
和stopTimer
函数。计时器每秒触发并调用increaseTimerCount
函数。我也有一个ivar timerCount
,它以秒为单位保持经过的时间。
- (void)increaseTimerCount
{
timerCountLabel.text = [NSString stringWithFormat:@"%d", timerCount++];
}
- (IBAction)startTimer
{
timer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(increaseTimerCount) userInfo:nil repeats:YES];
}
- (IBAction)stopTimer
{
[timer invalidate];
[timer release];
}
问题是按下开始按钮时似乎有延迟(我假设这是因为每次调用startTimer时都会重新初始化计时器)。有没有办法只是暂停和恢复计时器而不会使它失效并重新创建它?或者更好/替代的方式吗?
感谢。
答案 0 :(得分:11)
有点过时,但如果有人仍然感兴趣......
不要“停止”计时器,而是在暂停期间停止递增,例如
- (void)increaseTimerCount
{
if (!self.paused){
timerCount++
}
timerCountLabel.text = [NSString stringWithFormat:@"%d", timerCount];
}
答案 1 :(得分:9)
您不能在不使用invalidate
的情况下暂停计时器。你可以做的是添加
[timer fire];
在startTimer
。中创建计时器后