2011-02-25 7 views
0

私はイベントへのカウントダウンを表すint値を持っています(表示されているビュー)。現在、私はこれを行う:ボタンをタップすると、私がやりたい何NSTimerを使用してカウントダウンを作成する

- (void) buttonTapped:(id)sender { 
    [self performSelector:@selector(displayView) afterDelay:countdownValue]; 
} 

すると、次...

、比例、赤、黄、緑に私のナビゲーションバーの色合いの色を変更していますカウントダウンが終了するまで、ビューを表示します。

たとえば、カウントダウンが3秒の場合、各色ごとに1秒、5秒の場合は1秒ごとに1.666になります。

NSTimerを使用してこれをスケジュールできますか?

ビューが表示されたら、タイマーを無効にする必要があります。

おかげ

答えて

3
float count_down = 5.0; 
[NSTimer scheduledTimerWithTimeInterval: count_down*(1.0/3.0) target: self 
           selector: @selector(changeToRed:) userInfo: nil repeats: NO]; 
[NSTimer scheduledTimerWithTimeInterval: count_down*(2.0/3.0) target: self 
           selector: @selector(changeToGreen:) userInfo: nil repeats: NO]; 
[NSTimer scheduledTimerWithTimeInterval: count_down target: self 
           selector: @selector(changeToBlue:) userInfo: nil repeats: NO]; 

とコールバック(あなたがやりたい):

-(void) changeToRed:(NSTimer*) t { 
    NSLog(@"red"); 
} 

-(void) changeToGreen:(NSTimer*) t { 
    NSLog(@"green"); 
} 

-(void) changeToBlue:(NSTimer*) t { 
    NSLog(@"blue"); 
} 
+0

(単一のタイマーを繰り返し火災対)マルチタイマーアプローチの微妙な利点があります。これを使用すると、ドリフト誤差が累積しません。 – bbum

+0

これは私のために働いていますが、ボタンをクリックして赤色に変わる色合いの色が変わるのが少し遅れています。これは最初のタイマーが1秒後に起動しているためですか?おかげで – joec

+0

はい。タイマーを即座に起動させたい場合は、最初の時間間隔を0に設定します。 – Max

関連する問題