计算秒到毫秒NSTimer

时间:2013-08-23 00:14:51

标签: ios objective-c nstimer

尝试找出我试图创建一个显示秒和毫秒的倒计时器的地方。这个想法是计时器显示更新UILable的NSString的倒计时时间。

我目前的代码是

-(void)timerRun {
    if (self.timerPageView.startCountdown) {
        NSLog(@"%i",self.timerPageView.xtime);

    self.timerPageView.sec = self.timerPageView.sec - 1;

    seconds = (self.timerPageView.sec % 60) % 60 ;
    milliseconds = (self.timerPageView.sec % 60) % 1000;


    NSString *timerOutput = [NSString stringWithFormat:@"%i:%i", seconds, milliseconds];
    self.timerPageView.timerText.text = timerOutput;

    if (self.timerPageView.resetTimer == YES) {
       [self setTimer];
}
}
    else {

    }


}

-(void)setTimer{
    if (self.timerPageView.xtime == 0) {
        self.timerPageView.xtime = 60000;
    }
    self.timerPageView.sec = self.timerPageView.xtime;
    self.timerPageView.countdownTimer = [NSTimer scheduledTimerWithTimeInterval:0.01 target:self selector:@selector(timerRun) userInfo:Nil repeats:YES];
    self.timerPageView.resetTimer = NO;
}

    int seconds;
    int milliseconds;
    int minutes;
}

任何人都有任何想法我做错了什么?

3 个答案:

答案 0 :(得分:4)

你有一个定时器,每秒大约会执行100次(间隔为0.01)。

每次递减1个值。因此,您的self.timerPageView.sec变量似乎是百分之一秒。

要获得秒数,您需要将此值除以100.要获得毫秒数,您需要乘以10然后乘以1000的模数。

seconds = self.timerPageView.sec / 100;
milliseconds = (self.timerPageView.sec * 10) % 1000;

更新

另请注意,您的计时器非常不准确。计时器不会每百分之一秒重复一次。它可能每秒只运行80次或其他不准确的速率。

更好的方法是在开始时获得当前时间。然后在timerRun方法中,您将再次获得当前时间。减去这两个数字。这将给出实际经过的时间。使用它而不是每个循环递减一个值。

答案 1 :(得分:3)

这些计算看起来很可疑:

seconds = (self.timerPageView.sec % 60) % 60 ;
milliseconds = (self.timerPageView.sec % 60) % 1000;

你在浮点值上使用int类型计算(在它们的实现中非常粗略)几秒钟。

   NSUInteger seconds = (NSUInteger)(self.timerPageView.sec * 100); //convert to an int
   NSUInteger milliseconds = (NSUInteger) ((self.timerPageView.sec - seconds)* 1000.);

答案 2 :(得分:3)

您设置的时间间隔为0.01,即每10毫秒,每毫秒为0.001 即便如此,NSTimer也不是那么准确,你可能不会每1毫秒才能使它工作。它从运行循环中触发,因此存在延迟和抖动。