Iphone iOS-以编程方式添加/删除子视图

Iphone iOS-以编程方式添加/删除子视图,iphone,objective-c,ios,uiimageview,subview,Iphone,Objective C,Ios,Uiimageview,Subview,好的,我想添加一个UIImageView作为子视图,然后以启动屏幕的方式在几秒钟后删除它。我找到了三种不同的方法,但根据Objective-C和Apple的说法,我不知道哪一种是最好的方法 以下是三种不同的方法: (一) 在MyAppDelegate.h中 @interface MyAppDelegate : NSObject <UIApplicationDelegate> { MyViewController *myViewController; UIImageV

好的,我想添加一个UIImageView作为子视图,然后以启动屏幕的方式在几秒钟后删除它。我找到了三种不同的方法,但根据Objective-C和Apple的说法,我不知道哪一种是最好的方法

以下是三种不同的方法:

(一) 在MyAppDelegate.h中

@interface MyAppDelegate : NSObject <UIApplicationDelegate> {

    MyViewController *myViewController;
    UIImageView *myImageView;
}


@property (nonatomic, retain) IBOutlet MyViewController *myViewController;
@property (nonatomic, retain) IBOutlet UIWindow *window;

@end
2) 在第二种方法中:

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
In my MyAppDelegate.h


@interface MyAppDelegate : NSObject <UIApplicationDelegate> {

    MyViewController *myViewController;

}

@property (nonatomic, retain) IBOutlet MyViewController *myViewController;
@property (nonatomic, retain) IBOutlet UIWindow *window;

@end
3) 在第三种方法中:

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
In my MyAppDelegate.h


@interface MyAppDelegate : NSObject <UIApplicationDelegate> {

    MyViewController *myViewController;

}

@property (nonatomic, retain) IBOutlet MyViewController *myViewController;
@property (nonatomic, retain) IBOutlet UIWindow *window;

@end
总之。。第一种方法不使用UIImage的属性,只使用变量,第二种方法使用属性,第三种方法只创建UIImage并将其添加为子视图,然后根据其标记将其删除

我相信这三种选择听起来都是正确的。。但是有什么我应该遵循的方法吗。这些选项中有哪一个在内存和性能方面更好

提前感谢,


Andreas

如果您不打算再次使用该图像,则无需保留指向该图像的指针。此外,如果使用
IBOutlet
,还需要在IB中添加视图。在这个具体的例子中,我想说选项3最有意义,特别是考虑到这个选择,您可以从一个标准的“基于视图的应用程序”模板开始,只需添加有关图像视图的部分,而不必考虑其他部分。最后一个选择3的观察结果;将2条消息发送到窗口

 [self.window addSubview:myViewController.view];

 [self.window makeKeyAndVisible];

似乎超出了任何方法的范围。这可能只是复制和粘贴错误,但请注意它们应该位于“
didfishlaunchwithoptions
:”

您可以使用附加到视图层的动画。下面的代码会使视图淡出,但有许多其他方法可以将其删除。(您需要附加QuartzCore框架)


撇开技术问题不谈,因为闪屏会人为地延迟用户使用你的应用程序,这是一个糟糕的移动设计,不是iPhone HIG所建议的。问题不在于闪屏。这是关于选择正确的方法来实现某些东西。这个例子可能是一个与启动屏幕完全无关的问题!这是添加子视图然后删除它的正确方法。第一种方法似乎是正确的,但您不需要初始化UIImageView,因为它是一个出口,只需在需要的延迟时间后启动该方法,然后将其从superView(可以是您的viewController)中删除
 [self.window addSubview:myViewController.view];

 [self.window makeKeyAndVisible];
myImageView.layer.opacity = 0.0;
// this is the state the view will be in after the animation (e.g. invisible)

CABasicAnimation *theFade;

theFade = [CABasicAnimation animationwithKeyPath:@"opacity"];
theFade.duration = 10.0; 
theFade.fromValue = [NSNumber numberWithFloat:1.0]; // i.e. visible
theFade.toValue = [NSNumber numberWithFloat:0.0]; // i.e. invisible 
[myImageView.layer addAnimation:theFade forKey:@"animateOpacity"];