Iphone Splash Screen

2019-02-07 11:58发布

问题:

I am really trying to do my best but I can't really find out what's going wrong in my code. I made a lot of search but I guess I just can't understand some objective c basics ;)

My first question is related to the code below :

[window addSubview:tabBarController.view];

UIImage *image = [UIImage imageNamed:@"lol.png"];
UIImageView *defaultImage = [[UIImageView alloc] initWithImage:image];

Does it make a difference doing this :

[window addSubview:defaultImage];

or this :

[tabBarController.view addSubview:defaultImage];

My second question is about creating a splash screen. I tried to do it by myself but I just can't find out what's not working (we're in appDelegate) :

[window addSubview:tabBarController.view];

UIImage *image = [UIImage imageNamed:@"lol.png"];
UIImageView *defaultImage = [[UIImageView alloc] initWithImage:image]; 

[window addSubview:defaultImage];
[window makeKeyAndVisible]; //makes the window visible right ?

UIImage *image2 = [UIImage imageNamed:@"lol2.png"];
UIImageView *pubImage = [[UIImageView alloc] initWithImage:image2];

[UIView setAnimationDelegate:self];
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:2.0];
[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView:window cache:YES]; //not sure about the forView:window ...

[defaultImage removeFromSuperview];
[window addSubview:pubImage];

[UIView commitAnimations];

Hmm, I guess since I called "makekeyandvisible" window should be visible and animation should be showed to users ...

Well, I am missing a step as it doesn't work :D.

Help welcome,

Gauthier.

回答1:

If you add an image to your project named "Default.png" it will act as a splash screen.

Forcing your user to look at a screen any longer than necessary is typically considered bad.

If you do want to add one anyways using addSubview: should work fine, if you'd like animation you may want to look into CATransitions instead of the UIView animations.

Adding the splash screen to the window or the main view controller should appear the same to the user.

Edit: Try this snippet -- you'll need to #include <QuartzCore/QuartzCore.h> and add the QuartzCore framework

// Using a CATransition
    CATransition* transition = [CATransition animation];
    transition.delegate = self; // if you set this, implement the method below
    transition.duration = 0.3;
    transition.timingFunction = [CAMediaTimingFunction functionWithName: kCAMediaTimingFunctionEaseOut];
    transition.type = kCATransitionMoveIn;
    transition.subtype = kCATransitionFromRight;
    [self.view.layer addAnimation: transition forKey: nil];
    [self.view addSubview: theNewView];

Add this if you need to do something when the transition is finished:

#pragma mark -
#pragma mark CAAnimation Delegate Methods
- (void)animationDidStop: (CAAnimation*)theAnimation finished: (BOOL)flag
{
    // Whatever you need to do when the animation is done.
}


回答2:

I don't agree with the first statement in the other answer, that says 'If you add an image to your project named "Default.png" it will act as a splash screen.'

Default.png is the launch image. The Apple HIG specifically distinguishes between launch image and splash screen.

In particular, it says

Avoid using your launch image as an opportunity to provide:

  • An “application entry experience,” such as a splash screen
  • An About window
  • Branding elements, unless they are a static part of your application’s first screen

Hence, for a splash screen, use NSTimer or a button for the user to dismiss the splash screen.