Ok Tôi muốn thêm UIImageView làm chế độ xem phụ rồi xóa nó sau một vài giây theo cách hoạt động của màn hình giật gân. Tôi tìm thấy ba cách tiếp cận khác nhau để làm điều đó nhưng tôi không thể hiểu được cách nào là cách tiếp cận tốt nhất theo Mục tiêu-C và Apple.iOS - thêm/xóa một chế độ xem phụ theo chương trình
Dưới đây là ba cách tiếp cận khác nhau:
1) Trong MyAppDelegate.h tôi
@interface MyAppDelegate : NSObject <UIApplicationDelegate> {
MyViewController *myViewController;
UIImageView *myImageView;
}
@property (nonatomic, retain) IBOutlet MyViewController *myViewController;
@property (nonatomic, retain) IBOutlet UIWindow *window;
@end
và trong 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) trong cách tiếp cận thứ hai:
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
và trong 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) trong cách tiếp cận thứ ba:
In my MyAppDelegate.h
@interface MyAppDelegate : NSObject <UIApplicationDelegate> {
MyViewController *myViewController;
}
@property (nonatomic, retain) IBOutlet MyViewController *myViewController;
@property (nonatomic, retain) IBOutlet UIWindow *window;
@end
và trong 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];
}
Vì vậy, để tổng hợp .. Cách tiếp cận đầu tiên không sử dụng một tài sản cho UIImage chỉ một biến, cái thứ hai sử dụng thuộc tính và cái thứ ba chỉ tạo UIImage và thêm nó dưới dạng phần phụ và sau đó xóa nó dựa trên thẻ của nó ..
Cách tiếp cận phù hợp là gì .. Tôi tin rằng cả ba tùy chọn đều đúng .. Nhưng có cách nào tôi nên làm theo không. Có bất kỳ tùy chọn nào trong số này tốt hơn về bộ nhớ và hiệu suất không?
Cảm ơn trước,
Andreas
Câu hỏi kỹ thuật sang một bên có màn hình giật gân giả tạo người dùng sử dụng thiết bị di động kém và không phải là gợi ý của iPhone HIG. – Nick
câu hỏi không phải là về màn hình giật gân. Đó là về việc chọn đúng cách để thực hiện điều gì đó ..Ví dụ này có thể là một câu hỏi cho một cái gì đó hoàn toàn không liên quan với màn hình giật gân! Đó là về đúng cách để thêm một subview và sau đó loại bỏ nó .. – andreasv
Cách tiếp cận đầu tiên có vẻ đúng nhưng bạn không cần phải khởi tạo UIImageView của bạn vì nó là một Outlet, chỉ cần cháy phương pháp sau thời gian chậm trễ bạn muốn và loại bỏ nó từ superView có thể là viewController của bạn –