NSTimer qui démare automatiquement au chargement de la vue

jazetjazjazetjaz Membre
06:08 modifié dans API UIKit #1
bonjour à  tous,
je suis un tutoriel qui programme un compte à  rebours avec une petite animation.
Le compte à  rebours démare grace à  un bouton.
J'aimerais faire demarer le compte à  rebours automatiquement au chargement de la page et donc sans bouton.
Voici une partie du code de mon mainview.m:

- (IBAction)StartTimer {

time=10.0;
    [UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration: 10.0];
ballView.center=redView.center;
[UIView commitAnimations];
timer= [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(countDown) userInfo:nil  repeats:YES];

}

-(void)countDown {
time= time -1;
if (time==0)
[timer invalidate];
[self updateLabel];
}
-(void)updateLabel {
countLabel.text=[NSString stringWithFormat:@%i,time];
}
Je pensais que je pouvais démarrer l'action en la mettant  dans un viewDidload
directement mais ça ne marche pas.
Merci si certains peuvent me donner un avis
Jaz
ps cidessus mon mainView.h:
@interface MainView :UIView {
    IBOutlet UIImageView *ballView;
    IBOutlet UILabel *countLabel;
    IBOutlet UIImageView *greenView;
    IBOutlet UIImageView *pathView;
    IBOutlet UIImageView *redView;
NSTimer *timer;
NSUInteger time;
}
@property (nonatomic,retain) UIImageView *ballView;
@property (nonatomic,retain) UIImageView *redView;
@property (nonatomic,retain) UIImageView *greenView;
@property (nonatomic,retain) UIImageView *pathView;
@property (nonatomic,retain) UILabel *countLabel;
@property (nonatomic,retain) NSTimer *timer;

-(void)updateLabel;
-(void)countDown;

- (IBAction)StartTimer;
@end


Réponses

  • allianallian Membre
    06:08 modifié #2
    Au lieu (IBAction)StartTimer, tu déclare (void)StartTimer
    et tu appele cette méthode dans ton viewDidLoad
  • zoczoc Membre
    août 2009 modifié #3
    dans 1249396139:

    Au lieu (IBAction)StartTimer, tu déclare (void)StartTimer
    et tu appele cette méthode dans ton viewDidLoad


    Ca ne changera strictement rien car IBAction = void  :)

    #ifndef IBAction<br />#define IBAction void<br />#endif
    


    En gros, IBAction est juste un "alias" de void, qui permet à  Interface Builder de détecter les actions possibles sur un objet quand il parse les .h. Il ne change par conséquent rien au comportement du code situé dans l'implémentation du message.

    Dans le même style, IBOutlet est un "alias" de "rien". Il est donc tout simplement supprimé par le préprocesseur:

    #ifndef IBOutlet<br />#define IBOutlet<br />#endif
    



    Maintenant, pour revenir à  la question : Je suis surpris de voir une classe dérivant de UIView et contenant des outlets.... Normalement les outlets sont dans un controlleur (UIViewController), pas dans une vue. De plus, à  ma connaissance viewDidLoad n'est jamais appelé sur une vue, mais uniquement sur le controlleur d'une vue (quand cette vue a été chargée).

    Je pense donc qu'il y a un gros problème de conception dans le bout de code donné en exemple, et mon premier conseil sera de revoir la documentation concernant le "design pattern" "Modèle/Vue/Controlleur" qui est à  la base d'à  peu près tout dans Cocoa/CocoaTouch.
  • allianallian Membre
    06:08 modifié #4
    oui Zoc j'avais lu un peu vite tout ça, pour ce qui est du IBAction meme si c'est pareil vu qu'il ne déclenche pas d'action au travers de IB n'est il pas mieux de mettre void ?
Connectez-vous ou Inscrivez-vous pour répondre.