Ok, ich möchte ein UIImageView als Subview hinzufügen und es dann nach ein paar Sekunden entfernen, so wie ein Splash-Screen funktioniert. Ich habe drei verschiedene Ansätze dazu gefunden, aber ich verstehe nicht, welcher der beste Ansatz gemäß Objective-C und Apple ist.
Im Folgenden sind die drei verschiedenen Ansätze:
1) In meinem MyAppDelegate.h
@interface MyAppDelegate : NSObject {
MyViewController *myViewController;
UIImageView *myImageView;
}
@property (nonatomic, retain) IBOutlet MyViewController *myViewController;
@property (nonatomic, retain) IBOutlet UIWindow *window;
@end
und in 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) im zweiten Ansatz:
In meinem MyAppDelegate.h
@interface MyAppDelegate : NSObject {
MyViewController *myViewController;
UIImageView *myImageView;
}
@property (nonatomic, retain) IBOutlet UIImageView *myImageView;
@property (nonatomic, retain) IBOutlet MyViewController *myViewController;
@property (nonatomic, retain) IBOutlet UIWindow *window;
@end
und in MyAppDelegate.m
@synthesize 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) im dritten Ansatz:
In meinem MyAppDelegate.h
@interface MyAppDelegate : NSObject {
MyViewController *myViewController;
}
@property (nonatomic, retain) IBOutlet MyViewController *myViewController;
@property (nonatomic, retain) IBOutlet UIWindow *window;
und in 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];
}
Also, um zusammenzufassen.. Der erste Ansatz verwendet keine Eigenschaft für das UIImage, sondern nur eine Variable, der zweite Ansatz verwendet eine Eigenschaft und der dritte erstellt einfach das UIImage und fügt es als Subview hinzu und entfernt es dann anhand seines Tags..
Welcher ist der richtige Ansatz zu folgen.. Ich glaube, dass alle drei Optionen richtig klingen.. Aber gibt es einen bestimmten Weg, dem ich folgen sollte. Ist eine der Optionen besser in Bezug auf Speicher und Leistung?
Danke im Voraus,
Andreas