2010-06-12 7 views
0

Je construis une application iPhone qui utilise UIImageView pour afficher une animation. Dans la méthode viewDidLoad MainViewController(), je suis en train de créer une instance d'un CustomClass, puis la mise en place des animations:Comment référencer mon MainViewController d'une autre classe?

 
- (void)viewDidLoad 
{ 
[super viewDidLoad]; 
cc = [CustomClass new]; 

NSArray * imageArray = [[NSArray alloc] initWithObjects: 
      [UIImage imageNamed:@"image-1-off.jpg"], 
      [UIImage imageNamed:@"image-2-off.jpg"], 
      [UIImage imageNamed:@"image-3-off.jpg"], 
      [UIImage imageNamed:@"image-4-off.jpg"], 
      nil]; 
offSequence = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)]; 
offSequence.animationImages = imageArray; 
offSequence.animationDuration = .8; 
offSequence.contentMode = UIViewContentModeBottomLeft; 
[self.view addSubview:offSequence]; 
[offSequence startAnimating]; 
} 

Cela fonctionne très bien. Cependant, j'aimerais pouvoir déplacer tout le code ci-dessus qui configure UIImageView dans ma CustomClass. Le problème se situe dans l'avant-dernière ligne:

[self.view addSubview: offSequence];

J'ai fondamentalement besoin de remplacer 'self' par une référence à MainControllerView, donc je peux appeler addSubview depuis ma CustomClass. J'ai essayé de créer une instance var de CustomClass appelé mvc et une méthode setter qui prend une référence à la MainViewController comme argument en tant que tel:

Et puis je l'ai appelé dans les MainViewController comme ceci:

[cc setMainController: MainViewController: self];

Mais cela donne toutes sortes d'erreurs que je peux publier ici, mais il me semble que je peux être trop compliqué. Existe-t-il un moyen plus simple de référencer le MainViewController qui a installé ma CustomClass?

Répondre

0

Le moyen le plus propre de le faire serait de créer une sous-classe de UIImageView et de créer un initialiseur de personnalisation qui accepte le tableau. Ainsi,

@interface MyCustomImageView:UIImageView { 
//... 
} 

-(id) initWithFrame(CGRect) aRect animationImages:(NSArray *) imageArray; 
@end 

Ensuite, dans votre contrôleur principal de vue initialize juste la vue de l'image personnalisée, le remplir et l'ajouter aux sous-vues. Cela rendra tout bien encapsulé, modulaire et réutilisable.

+0

Merci, c'est fascinant ... Je n'avais pas pensé à sous-classer UIImageView mais il est parfaitement logique de garder les choses à leur place. En fait, j'ai trouvé une autre solution avec mon approche précédente qui fonctionnait: Il y avait des problèmes avec la façon dont j'essayais de transmettre et de stocker la référence au MainViewController, tournant principalement autour du fait que je me référais à MainViewController-- J'ai changé cela en NSObject et ça fonctionne comme un charme. – todd412

Questions connexes