ios fade out splash screen (iphone 5 friendly)

試著忘記壹切 提交于 2019-12-18 03:40:57

问题


I'm wanting to spoof the feel of the main splash screen fading out whenever applicationDidBecomeActive is called, but it's not working. What am I doing wrong?

- (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];
                     }];
}

Then you need to define the following somewhere. I use the project .pch but you can use your header if you want.

#define IS_IPHONE_5 ( fabs( ( double )[ [ UIScreen mainScreen ] bounds ].size.height - ( double )568 ) < DBL_EPSILON )

回答1:


If that is really your code, you probably have a typo in the image name. (If not, let us know what "not working" means.)

Also, the splash screen doesn't normally come up every applicationDidBecomeActive:. didFinishLaunchingWithOptions: is the time you know that you have been launched and the splash screen had been shown on your behalf.




回答2:


I find, from ios6 you get a nice transition doing this

-(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;
}

then immediately at the start of

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

It gives a cross fadeish effect from the loading screen to the now loaded app screen.




回答3:


Try adding it directly to your window instead of the rootViewController.view.

[self.window addSubview:splash];

You may also need to rotate the image using view.transform to align with the startup image.




回答4:


Your code looks about right; I do this in several apps.

However, you want to do this as part of applicationDidFinishLaunching:options: and not in applicationDidBecomeActive:. It only makes sense to fade the splash screen when it is shown, which is only when the app is launched and not already running. When your app becomes active, it may have been in the background -- i.e. already launched -- so fading the splash screen in this case doesn't make sense.

Or, did you want your splash screen to appear ALWAYS when it becomes active, even if it is resumed from the background from a suspended state?



来源:https://stackoverflow.com/questions/9184448/ios-fade-out-splash-screen-iphone-5-friendly

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!