2017-10-14 2 views
0

Grand Central Dispatch(次にUILabelのように表示)のシステムクロックに同期されたカウントダウンタイマーを基準日に基づいて行うには、きれいな方法があるのだろうか? - 私の参照日付が今から20分後のNSDateであれば、システムクロックと同期している秒数で表示されます(フォーマットについて心配しないでください)。「NSTimeInterval」を秒単位でカウントダウンすることなく、カウントダウンタイマーを同期させましたか? (たぶん丸め込みのため)

更新メソッド呼び出しがスケジュールどおりに到着しない場合に備えて、このクイックバージョンを実行するだけで毎秒スキップします。

これはかなり基本的な質問のようです。私は、更新間隔を10倍にする以外に、基本的な/クリーンなソリューションを探しています。


また、解決策にはNSTimerを使用しないでください。

+0

繰り返しNSTimerを1秒未満の間隔、たとえば0.5秒間実行します。タイマーが起動するたびに、あなたの開始(または終了)からの時間間隔に基づいてラベルを更新する '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倍にする以外に基本的できれいな解決方法が理想的です。 ...基本的にここでやったことです。 –

関連する問題