我想要在调用applicationDidBecomeActive
时欺骗主闪屏的感觉,但它不起作用。我做错了什么?
- (void)applicationDidBecomeActive:(UIApplication *)application
{
if(IS_IPHONE_5)
splash = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"Default-568h.png"]];
else
splash = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"Default.png"]];
[self.window.rootViewController.view addSubview:splash];
[UIView animateWithDuration:0.5
animations:^{
splash.alpha = 0;
}
completion:^(BOOL finished) {
[splash removeFromSuperview];
}];
}
然后你需要在某处定义以下内容。我使用项目.pch
但您可以根据需要使用标题。
#define IS_IPHONE_5 ( fabs( ( double )[ [ UIScreen mainScreen ] bounds ].size.height - ( double )568 ) < DBL_EPSILON )
答案 0 :(得分:6)
我发现,从ios6开始,你做了一个很好的过渡
-(BOOL)application:(UIApplication *)application willFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
[UIView animateWithDuration:0.2
delay:0
options: UIViewAnimationCurveEaseIn
animations:^{
self.window.viewForBaselineLayout.alpha = 0; // and at this alpha
}
completion:^(BOOL finished){
}];
return YES;
}
然后立即开始
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
[UIView animateWithDuration:0.5
delay:0
options: UIViewAnimationCurveEaseOut
animations:^{
self.window.viewForBaselineLayout.alpha = 1; // and at this alpha
}
completion:^(BOOL finished){
}];
从加载屏幕到现在加载的应用程序屏幕,它会产生交叉淡入淡出效果。
答案 1 :(得分:3)
如果这确实是您的代码,您可能在图像名称中输入了拼写错误。 (如果没有,请告诉我们“不工作”的含义。)
此外,每个applicationDidBecomeActive:
通常不会出现启动画面。 didFinishLaunchingWithOptions:
是您知道自己已经启动并且代表您显示启动画面的时间。
答案 2 :(得分:3)
尝试将其直接添加到您的窗口而不是rootViewController.view。
[self.window addSubview:splash];
您可能还需要使用view.transform旋转图像以与启动图像对齐。
答案 3 :(得分:2)
您的代码看起来正确;我在几个应用程序中执行此操作。
但是,您希望在applicationDidFinishLaunching:options:
中执行此操作,而不是在applicationDidBecomeActive:
中执行此操作。只有当应用程序启动但尚未运行时,才会在显示时淡出启动画面。当你的应用程序变为活动状态时,它可能已经在后台 - 即已经启动 - 因此在这种情况下淡出启动屏幕是没有意义的。
或者,您是否希望启动画面在活动时始终显示,即使它是从暂停状态从后台恢复的?