2011-04-06 1 views
1

Je voudrais savoir s'il existe une méthode équivalente à awakeFromNib.Pourquoi awakeFromNib n'est pas appelé lorsque la vue est à nouveau visitée?

Le problème auquel je suis confronté est le suivant:
Mon application a 2 vues et la 2ème vue a une sous-classe (UIview) que j'utilise pour dessiner.
J'utilise une minuterie appelée depuis awakeFromNib pour animer le dessin.

- (void) awakeFromNib 
{ 
    timer = [NSTimer scheduledTimerWithTimeInterval:0.02 target:selfselector:@selector(ReDraw) userInfo:nil repeats:YES]; 
} 

- (void) ReDraw 
{ 
    i++; 
    [self setNeedsDisplay]; 
} 

Maintenant, quand je vais revenir à ma première vue et revenir à ce point de vue le dessin est toujours (awakeFromNib n'est pas appelé à nouveau).
La minuterie ne s'arrête pas lorsque je retourne à la première vue. Je veux que la minuterie s'arrête lorsque je reviens et que le dessin redémarre lorsque je reviendrai à la deuxième vue.

Les méthodes viewdidLoad et initWithFrame ne fonctionnent pas dans la sous-classe.

Merci

+0

UIViews n'ont même pas les méthodes viewDidLoad seulement UIViewControllers. Qu'en est-il de viewWillAppear et viewWillDisappear? Je veux dire que lorsque vous montrez d'autres vues, vous pouvez simplement arrêter le chronomètre. –

+0

Il n'a pas viewWillAppear et viewWillDisappear – R3D3vil

+0

De quel type de classe est "it"? –

Répondre

1

awakeFromNib, viewdidLoad et initWithFrame sont tous appelés au cours de la phase d'initialisation de l'objet. Si l'objet est déjà créé, ces méthodes ne seront plus appelées. Vous pouvez forcer une vue à se dessiner en utilisant la méthode setNeedsDisplay de la vue.

+0

Alors, comment puis-je arrêter le minuteur lorsque je retourne à ma première vue et que je l'éteins de nouveau quand je retourne à la vue? – R3D3vil

+0

Vous créez votre temporisateur, le conserver comme dans une variable d'instance dans une classe de contrôleur (UIViewController peut-être). Lorsque vous changez de vue, la minuterie est invalidée, puis redémarrée si nécessaire. – David

+0

ok ... mais je ne peux pas recommencer depuis que j'utilise awakeFromNib pour utiliser la minuterie la première fois. Je ne peux même pas appeler une méthode dans la classe (avec la méthode drawRect) qui est une sous-classe de UIview d'une autre classe. – R3D3vil

Questions connexes