2009-11-04 7 views
0

Semblable aux jeux Simon de l'ancien, je veux montrer à l'utilisateur une séquence de boutons & puis les faire répéter. L'endroit où je suis coincé montre le premier bouton mis en surbrillance, par exemple, 500ms, en attente 100ms, montrant le second en surbrillance pendant 500ms, en attendant une autre 100ms, montrant le 3ème & ainsi de suite.Comment afficher une séquence de boutons en surbrillance?

De autres Stackoverflower'ers j'ai appris à ce bloc:

redButton.highlighted = YES; 

[UIView beginAnimations:@"" context:nil]; 
[UIView setAnimationStartDate:[NSDate dateWithTimeIntervalSinceNow:1]]; 
[UIView setAnimationsEnabled:NO]; 
redButton.highlighted = NO; 
[UIView commitAnimations]; 

[UIView beginAnimations:@"" context:nil]; 
[UIView setAnimationStartDate: [NSDate dateWithTimeIntervalSinceNow:2]]; 
[UIView setAnimationsEnabled:NO]; 
blueButton.highlighted = YES; 
[UIView commitAnimations]; 

Le redbutton mettra en évidence, mais aucune des actions subséquentes ont lieu.

Répondre

4

Il pourrait y avoir un moyen de faire cela avec Core Animation, mais ce n'est pas nécessaire. Vous n'animez pas la propriété en surbrillance, vous l'allumez et l'éteignez simplement.

J'ai créé une application iPhone basée sur une vue simple pour faire cela avec des minuteurs. Voici le code du contrôleur de vue:

SimonTestViewController.h:

#import <UIKit/UIKit.h> 

@interface SimonTestViewController : UIViewController { 
IBOutlet UIButton *redButton; 
IBOutlet UIButton *blueButton; 
IBOutlet UIButton *greenButton; 
IBOutlet UIButton *yellowButton; 
} 

- (void)highlightButton:(UIButton*)button Delay:(double)delay; 
- (void)highlightOn:(NSTimer*)timer; 
- (void)highlightOff:(NSTimer*)timer; 

@end 

SimonTestViewController.m:

#import "SimonTestViewController.h" 

@implementation SimonTestViewController 

const double HIGHLIGHT_SECONDS = 0.5; // 500 ms 
const double NEXT_SECONDS = 0.6; // 600 ms 

- (void)viewDidAppear:(BOOL)animated { 
[super viewDidAppear:animated]; 

[self highlightButton:redButton Delay:0.0]; 
[self highlightButton:blueButton Delay:NEXT_SECONDS]; 
[self highlightButton:greenButton Delay:NEXT_SECONDS * 2]; 
[self highlightButton:blueButton Delay:NEXT_SECONDS * 3]; 
[self highlightButton:yellowButton Delay:NEXT_SECONDS * 4]; 
[self highlightButton:redButton Delay:NEXT_SECONDS * 5]; 
} 

- (void)highlightButton:(UIButton*)button Delay:(double)delay { 
[NSTimer scheduledTimerWithTimeInterval:delay target:self selector:@selector(highlightOn:) userInfo:button repeats:NO]; 
} 

- (void)highlightOn:(NSTimer*)timer { 
UIButton *button = (UIButton*)[timer userInfo]; 

button.highlighted = YES; 

[NSTimer scheduledTimerWithTimeInterval:HIGHLIGHT_SECONDS target:self selector:@selector(highlightOff:) userInfo:button repeats:NO]; 
} 

- (void)highlightOff:(NSTimer*)timer { 
UIButton *button = (UIButton*)[timer userInfo]; 

button.highlighted = NO; 
} 
Questions connexes