2017-10-14 27 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倍或更長的時間外,我還希望獲得基本/乾淨的解決方案。」 ...這基本上是你在這裏完成的。 –