我只想在didFinishLaunchingWithOptions中用动画来显示视图,我的代码如下:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
CGRect finalRect = CGRectMake(0, 0, [[UIScreen mainScreen] bounds].size.width, [[UIScreen mainScreen] bounds].size.height);
UIImage *image = [UIImage imageNamed:@"122.jpg"];
UIButton* pic = [[UIButton alloc] initWithFrame:finalRect];
[pic setBackgroundImage:image forState:UIControlStateNormal];
[pic setHidden:true];
pic.center = CGPointMake(finalRect.size.width / 2, finalRect.size.height / 2);
UIViewController* controller = [[UIViewController alloc] init];
[controller setView:pic];
[self.window setRootViewController:controller];
[self.window makeKeyAndVisible];
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:2.5];
[pic setHidden:false];
[UIView commitAnimations];
return YES;
}
但动画根本不起作用。带有图片的子视图突然显示在屏幕上。但是,如果我使用按钮来触发动画代码,则视图将显示动画。对didFinishLaunchingWithOptions有什么限制吗?
PS:
通过将动画代码移动到控制器的viewDidAppear proc中解决此问题,就像下面的rokjarc所述。
但是还有另一个解决办法,就是在从didFinishLaunchingWithOptions调用的延迟例程中执行动画代码,如:
[self performSelector:@selector(executeAnimation) withObject:nil afterDelay:1];
答案 0 :(得分:2)
您的按钮会被controller.view
覆盖,该window.view
也会加载到pic
之上的controller::viewDidAppear
。
您可以将代码移至controller.view
。
如果您决定采用这种方式,请不要忘记将按钮添加到appDelegate.window
而不是YES
。
由于看起来您只想在应用程序启动时显示此动画,您可以设置向控制器添加名为showAnimation的BOOL属性。将此属性设置为didFinishLaunchingWithOptions:
中的NO
和controller::viewDidAppear
末尾的if (self.showAnimation)...
。
这样您就可以有条件地(controller::viewDidAppear
)只显示一次所需的动画({{1}})。