iOS淡出启动画面(适用于iPhone 5)

6

我想在调用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个回答

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){
                     }];

它可以使启动屏幕平滑地过渡到已加载的应用程序界面,产生一种交叉淡入淡出的效果。

3

如果这确实是你的代码,那么你可能在图像名称中打错了字。如果不是,请告诉我们“不起作用”是什么意思。

此外,启动画面通常不会在每个applicationDidBecomeActive:中出现。didFinishLaunchingWithOptions:是你知道自己已被启动并代表你显示了启动画面的时间。


1
在模拟器中,启动画面每次都会出现,但在设备上只有在初始加载时才会出现。知道这点很好。 - Jacksonkr

3
尝试直接将它添加到你的窗口而不是rootViewController.view中。
[self.window addSubview:splash];

您可能还需要使用view.transform旋转图像以与启动图像对齐。


2

你的代码看起来没问题;我在几个应用程序中都这样做。

但是,你需要将其作为applicationDidFinishLaunching:options:的一部分执行,而不是在applicationDidBecomeActive:中执行。只有当应用程序启动且尚未运行时才显示闪屏画面,因此在显示它时才淡出它是有意义的。当你的应用程序变为活动状态时,它可能一直在后台运行--也就是已经启动了--所以在这种情况下淡出闪屏画面是没有意义的。

或者,你希望无论从挂起状态的后台恢复还是重新启动,都要始终显示闪屏画面?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接