1

所以我知道 Default.png 可以用于 iPhone 应用程序中的启动画面,但我发现它看起来不专业,因为一旦应用程序完成加载就没有动画。

所以我正在尝试添加一个会淡出的启动画面,然后转到上一个视图。

互联网上的大多数示例往往基于使用 addSubview 的旧方式。我将如何将其添加到我的故事板应用程序中。

当前代码(时间错误,因为我不确定它最初是否有效)

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    splashView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"Default2.png"]];
    splashView.frame = CGRectMake(0, 0, 324, 480);
    [_window addSubview:splashView];
    [_window bringSubviewToFront:splashView];
    [_window makeKeyAndVisible];

    [self performSelector:@selector(removeSplash) withObject:nil afterDelay:1500.2];
    return YES;
}

-(void)removeSplash;
{
    [UIView animateWithDuration:1.0 animations:^{self.splashView.alpha = 0.0;} completion:^(BOOL finished){ [splashView removeFromSuperview]; }];
    [splashScreen release];
}
4

2 回答 2

3

除了Guntis Treulands的回答之外,我还有另一种方法可以做到这一点,而无需将动画代码移出- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions方法。

只需将您的 splashView 直接添加到_window.rootViewController.view.

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    UIImage *splashImage = [UIImage autoAdjustImageNamed:@"Default.png"];
    UIImageView *splashImageView = [[UIImageView alloc] initWithImage:splashImage];
    [self.window.rootViewController.view addSubview:splashImageView];
    [self.window.rootViewController.view bringSubviewToFront:splashImageView];
    [UIView animateWithDuration:1.5f
                          delay:2.0f
                        options:UIViewAnimationOptionCurveEaseInOut
                     animations:^{
                         splashImageView.alpha = .0f;
                         CGFloat x = -60.0f;
                         CGFloat y = -120.0f;
                         splashImageView.frame = CGRectMake(x,
                                                            y,
                                                            splashImageView.frame.size.width-2*x,
                                                            splashImageView.frame.size.height-2*y);
                     } completion:^(BOOL finished){
                         if (finished) {
                             [splashImageView removeFromSuperview];
                         }
                     }];

    return YES;
}
于 2013-04-19T03:11:42.663 回答
1

在您的情况下,我仍会将其添加为子视图,但始终将其保留为窗口的顶部子视图。当它alpha == 0停止接收触摸时。所以..每次你想淡出它时都没有理由释放它。

就我而言 - 每次应用程序最大化或打开时,客户都希望看到启动画面,所以我也这样做了:

- (void)applicationDidEnterBackground:(UIApplication *)application 
{
    extraSplashScreen.alpha = 1;  //when it goes in background - set splash screen visible.
}

- (void)applicationDidBecomeActive:(UIApplication *)application 
{ 
    [self fadeOutSplash]; //initiate fade out.
}

我的fadeOutSplash函数看起来像这样(以防万一):

- (void)fadeOutSplash
{
    [UIView beginAnimations:nil context:NULL];  

    [UIView setAnimationDelegate:self];

    [UIView setAnimationCurve:UIViewAnimationCurveEaseIn];   

    [UIView setAnimationDuration:0.3];

    [UIView setAnimationDelay:0.5];

    extraSplashScreen.alpha = 0;

    [UIView commitAnimations];
}

希望有帮助。

于 2012-06-10T07:34:40.887 回答