用`NSTimeInterval`同步倒数计时器不跳秒? (大概是由于四舍五入)
问题描述:
我想知道是否有一个干净的方式来做与大中央调度倒计时计时器(然后显示例如在UILabel
)与系统时钟同步...基于参考日期? - 所以如果我的参考日期是从现在开始的20分钟的NSDate
,我会以秒为单位显示倒计时(不必担心格式化),它会同步到系统时钟。用`NSTimeInterval`同步倒数计时器不跳秒? (大概是由于四舍五入)
只是做一个快速版本的这个每隔一段时间跳过一次,以防更新方法调用没有按计划到达。
对我来说,这似乎是一个非常基本的问题,所以我寻找一个基本/干净的解决方案,除了增加更新间隔为10倍或什么的理想。
此外,解决方案不应该使用NSTimer
。
答
我会用递归方法是这样的:
- (void) updateTimer{
NSDate *now = [NSDate date];
NSTimeInterval secondsToDate = [now timeIntervalSinceDate:self.referenceDate];
_timerLabel.text = [NSString stringWithFormat:@"%.0f", secondsToDate];
if(secondsToDate < 0){
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 0.1 * NSEC_PER_SEC), dispatch_get_main_queue(), ^{
[self updateTimer];
});
}else{
NSLog(@"Timer triggered!");
}
}
你只需要调用它的第一次,那么这将更新倒计时每0.1秒。
+0
我在帖子中特别提到:“对我来说,这似乎是一个非常基本的问题,所以除了将更新间隔增加到10倍或更长的时间外,我还希望获得基本/干净的解决方案。” ...这基本上是你在这里完成的。 –
以小于1秒的时间间隔运行重复的NSTimer,例如半秒。每次定时器启动时,根据自开始(或结束)以来的时间间隔更新标签'NSDate' – Paulw11
只是看到您不想使用'NSTimer' - 为什么? – Paulw11
我认为你应该使用'NSTimer' –