尝试找出我试图创建一个显示秒和毫秒的倒计时器的地方。这个想法是计时器显示更新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;
}
任何人都有任何想法我做错了什么?
答案 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毫秒才能使它工作。它从运行循环中触发,因此存在延迟和抖动。