2011-02-25 2 views
0

J'ai une valeur int représentant un compte à rebours vers un événement (vue affichée). À l'heure actuelle, je fais ceci:Utilisation de NSTimer pour créer un compte à rebours

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

Ce que je voudrais faire est la suivante ...

Lorsque le bouton est appuyé, changer la couleur de teinte de ma barre de navigation proportionnellement rouge, jaune, vert , jusqu'à ce que le compte à rebours expire, puis affichez la vue. Par exemple, si mon compte à rebours est de 3 secondes, une seconde pour chaque couleur, si elle est de 5 secondes, 1,666 pour chaque couleur. Puis-je utiliser un NSTimer pour programmer cela? Après l'affichage de la vue, la minuterie doit être invalidée.

Merci

Répondre

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]; 

Et callbacks (faites ce que vous voulez là-bas):

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

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

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

Il y a un avantage subtil à l'approche multi-timer (par rapport à une seule minuterie à plusieurs reprises les incendies). En utilisant cela, vous n'accumulez pas d'erreur de dérive. – bbum

+0

Cela fonctionne pour moi, mais il y a un léger délai entre le fait de cliquer sur le bouton et la couleur de la teinte changeant en rouge, est-ce parce que le premier minuteur se déclenche au bout d'une seconde? Merci – joec

+0

Oui. Si vous voulez que le chronomètre se déclenche immédiatement, réglez le premier intervalle sur 0. – Max