2017-10-14 133 views
0

我想知道是否有一个干净的方式来做与大中央调度倒计时计时器(然后显示例如在UILabel)与系统时钟同步...基于参考日期? - 所以如果我的参考日期是从现在开始的20分钟的NSDate,我会以秒为单位显示倒计时(不必担心格式化),它会同步到系统时钟。用`NSTimeInterval`同步倒数计时器不跳秒? (大概是由于四舍五入)

只是做一个快速版本的这个每隔一段时间跳过一次,以防更新方法调用没有按计划到达。

对我来说,这似乎是一个非常基本的问题,所以我寻找一个基本/干净的解决方案,除了增加更新间隔为10倍或什么的理想。


此外,解决方案不应该使用NSTimer

+0

以小于1秒的时间间隔运行重复的NSTimer,例如半秒。每次定时器启动时,根据自开始(或结束)以来的时间间隔更新标签'NSDate' – Paulw11

+2

只是看到您不想使用'NSTimer' - 为什么? – Paulw11

+0

我认为你应该使用'NSTimer' –

回答

0

我会用递归方法是这样的:

- (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倍或更长的时间外,我还希望获得基本/干净的解决方案。” ...这基本上是你在这里完成的。 –