ios淡出闪屏(iphone 5友好)

时间:2012-02-07 21:43:45

标签: ios splash-screen

我想要在调用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 )

4 个答案:

答案 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:中执行此操作。只有当应用程序启动但尚未运行时,才会在显示时淡出启动画面。当你的应用程序变为活动状态时,它可能已经在后台 - 即已经启动 - 因此在这种情况下淡出启动屏幕是没有意义的。

或者,您是否希望启动画面在活动时始终显示,即使它是从暂停状态从后台恢复的?