NSTimer倒计时滴答

时间:2015-09-17 14:06:04

标签: ios nstimer

请原谅我的英语,我不是很流利。

我有一个有10次锻炼的应用程序,我想给每个锻炼一些时间,例如: 第一次锻炼:30秒 第二次锻炼:40秒

但就目前而言,我只能为每次训练提供相同的秒数以进行所有锻炼..

这就是我以前的工作:

#define EXERCISELENGTH 30
#define EXERCISELENGTH1 40
#define RESTLENGTH 10

- (void)tick
{
if (self.inCountdown && (countdown == 0)) {
    self.inCountdown = NO;
    self.inExercise = YES;
    countdown = EXERCISELENGTH;
    [self workoutUI];
    [self updateUI];
    workoutIndex++;
}

if (self.inExercise && (countdown == 0)) {
    self.inExercise = NO;
    self.inRest = YES;
    countdown = RESTLENGTH;
    [self restUI];
    [self updateUI];
}
if (self.inRest && (countdown == 0)) {
    self.inRest = NO;
    self.inExercise = YES;
    countdown = EXERCISELENGTH;
    [self workoutUI];
    [self updateUI];
    workoutIndex++;
    if (workoutIndex == 10) {
        [self doneUI];
        [self.timer invalidate];
        return;
    }
}
[self updateUI];
countdown--;
}

任何帮助都将不胜感激。

谢谢

2 个答案:

答案 0 :(得分:0)

你有很多选择:

如果您想每30秒调用一次锻炼方法,请使用:

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

如果您想在30秒后调用锻炼方法,请使用:

 [self performSelector:@selector(workoutMethod) withObject:nil afterDelay:30.0];

如果您想在开始锻炼方法后开始倒数计时器,请使用以下示例:CountDown Timer ios tutorial?

答案 1 :(得分:0)

如果您想要一个倒数计时器,您应该设置一个重复的NSTimer,它会触发每秒钟左右更新一次显示的动作。但是,该操作应使用系统时间计算剩余时间。所以,你的代码应该:

  • 获取当前时间并根据所需时间段(20秒,30秒等)计算预期完成时间。
  • 以1秒的间隔启动重复计时器

您的计时器操作应该:

  • 获取当前系统时间
  • 与预期完成时间比较
  • 更新显示
  • 如果已达到完成时间,则自身无效

想要做的是依靠计时器以1秒的间隔触发。 NSTimer的解决方案是每个'}可以关闭0.1秒,这意味着30个滴答可以最多关闭3秒。使用系统时间,例如CACurrentMediaTime(),将提供更准确的时钟并避免误差累积。