iOS - ajouter / supprimer une sous-vue par programmation
Ok je veux ajouter une UIImageView comme une sous-vue, puis l'enlever après quelques secondes à la manière d'un écran de démarrage de travaux. J'ai trouvé trois approches différentes de le faire, mais je ne comprends pas laquelle est la meilleure approche en fonction Objective-C et Apple.
Ci-dessous sont les trois approches différentes:
1)
Dans mon MyAppDelegate.h
@interface MyAppDelegate : NSObject <UIApplicationDelegate> {
MyViewController *myViewController;
UIImageView *myImageView;
}
@property (nonatomic, retain) IBOutlet MyViewController *myViewController;
@property (nonatomic, retain) IBOutlet UIWindow *window;
@end
et dans MyAppDelegate.m
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
myImageView =[[UIImageView alloc] initWithFrame:CGRectMake(0.0,0.0,self.window.frame.size.width,self.window.frame.size.height)];
myImageView.image=[UIImage imageNamed:@"Yoga.png"];
[self.window addSubview:myImageView ];
[self.window bringSubviewToFront:myImageView];
[self performSelector:@selector(removeImage) withObject:nil afterDelay:2.5];
return YES;
}
-(void) removeImage
{
[myImageView removeFromSuperview];
[myImageView release];
[self.window addSubview:myViewController.view];
[self.window makeKeyAndVisible];
}
2) dans la deuxième approche:
In my MyAppDelegate.h
@interface MyAppDelegate : NSObject <UIApplicationDelegate> {
MyViewController *myViewController;
UIImageView *myImageView;
}
@property (nonatomic, retain) IBOutlet UIImageView *myImageView;
@property (nonatomic, retain) IBOutlet MyViewController *myViewController;
@property (nonatomic, retain) IBOutlet UIWindow *window;
@end
et dans MyAppDelegate.m
@synthétiser myImageView;
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
myImageView =[[UIImageView alloc] initWithFrame:CGRectMake(0.0,0.0,self.window.frame.size.width,self.window.frame.size.height)];
myImageView.image=[UIImage imageNamed:@"Yoga.png"];
[self.window addSubview:myImageView ];
[self.window bringSubviewToFront:myImageView];
[self performSelector:@selector(removeImage) withObject:nil afterDelay:2.5];
return YES;
}
-(void) removeImage
{
[myImageView removeFromSuperview];
[myImageView release];
[self.window addSubview:myViewController.view];
[self.window makeKeyAndVisible];
}
- (void)dealloc
{
[myViewController release];
[myImageView release];
}
3) dans la troisième approche:
In my MyAppDelegate.h
@interface MyAppDelegate : NSObject <UIApplicationDelegate> {
MyViewController *myViewController;
}
@property (nonatomic, retain) IBOutlet MyViewController *myViewController;
@property (nonatomic, retain) IBOutlet UIWindow *window;
@end
et dans MyAppDelegate.m
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
UIImageView *myImageView =[[UIImageView alloc] initWithFrame:CGRectMake(0.0,0.0,self.window.frame.size.width,self.window.frame.size.height)];
myImageView.image=[UIImage imageNamed:@"Yoga.png"];
myImageView.tag=22;
[self.window addSubview:myImageView ];
[myImageView release];
[self.window bringSubviewToFront:myImageView];
[self performSelector:@selector(removeImage) withObject:nil afterDelay:2.5];
return YES;
}
-(void) removeImage
{
for (UIView *subview in [self.view subviews]) {
if (subview.tag == 22){
[subview removeFromSuperview];
}
}
[self.window addSubview:myViewController.view];
[self.window makeKeyAndVisible];
}
- (void)dealloc
{
[myViewController release];
}
Donc, pour résumer,.. La première approche ne permet pas d'utiliser une propriété pour la UIImage seulement une variable, le second utilise une propriété et le troisième crée la UIImage et l'ajoute en tant que sous-vue puis le supprime basé sur son étiquette..
Qui est la bonne démarche à suivre..je crois que tous les trois options de son droit.. Mais est-il une certaine manière, je dois suivre. Est l'une de ces options de mieux en termes de mémoire et de performances?
Merci d'avance,
Andreas
source d'informationauteur andreasv
Vous devez vous connecter pour publier un commentaire.
Si vous n'envisagez pas d'utiliser de nouveau l'image, il n'est pas nécessaire de garder un pointeur vers elle. De plus, si vous utilisez
IBOutlet
vous devez ajouter le point de vue de l'IB. Dans cet exemple précis, je dirais que l'option 3 qui fait le plus de sens, surtout si l'on considère que ce choix vous pouvez a commencé avec une norme "vue en fonction de l'application" modèle et ajoutez simplement les bits à propos de l'affichage de l'image et de laisser le reste seul. Une dernière observation de choix 3; les 2 messages à la fenêtre;Semblent être en dehors de la portée de n'importe quelle méthode. C'est probablement juste un copier-coller de l'erreur, mais de prendre note qu'ils doivent situé à l'intérieur de "
didFinishLaunchingWithOptions
:"Vous pouvez utiliser une animation attaché à l'affichage de la couche. Le Code ci-dessous fondus de la vue - mais il existe de nombreuses autres façons de le retirer. (vous avez besoin de joindre le QuartzCore cadre)