获取App启动页LaunchImage或LaunchScreen

通过获取打包到App里的启动图,初始化一个UIImageView与屏幕同等大小再加载到UIWindow上来做启动延时,从而达到自定义启动动画的目的。iOS启动画面的方式目前我所知就两种:启动图和布局文件。

启动图(LaunchImage)###

启动图(LaunchImage)的管理其实在iOS开始中算比较简单的了 尤其是Xcode引入了xcassets之后,完全是傻瓜式的操作,有的时候我们还是需要获取Launch Image。
LaunchImage在APP初始化完之后会立即消失并显示APP的界面 ,但是有的时候我们不希望它这么快就消失(比如有的人希望有个过渡效果 有的人希望等某些设置或者数据加载完之后再消失) 这也很简单,我们只要自己把LaunchImage再显示出来并且置顶就OK了。
不过我们配置了那么多适用于不同屏幕分辨率的LaunchImage 如何获取适合于当前屏幕分辨率的LaunchImage呢?
普通的办法是 把所有LaunchImage加入到工程并根据屏幕分辨率来命名 比如(640_960.png 640_1136.png …) 然后在程序中用代码拼接出对应的文件名 并引用
但是这种办法比较原始 而且万一以后苹果又出了一些其他分辨率的设备 或者启动图发生变化的时候 又需要人工的修改工程配置 不太好 而且还需要多占一份资源(APP的容量又变大啦)
解决办法读取NSBundle中的设置 即可获取当前适用的LaunchImage

CGSize viewSize = self.window.bounds.size;
NSString *viewOrientation = @"Portrait"; //横屏请设置成 @"Landscape"
NSString *launchImage = nil;
NSArray* imagesDict = [[[NSBundle mainBundle] infoDictionary] valueForKey:@"UILaunchImages"];
for (NSDictionary* dict in imagesDict)
{
    CGSize imageSize = CGSizeFromString(dict[@"UILaunchImageSize"]);
    if (CGSizeEqualToSize(imageSize, viewSize) && [viewOrientation isEqualToString:dict[@"UILaunchImageOrientation"]]) 
    { 
        launchImage = dict[@"UILaunchImageName"]; 
    }
}
UIImageView *launchView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:launchImage]];
launchView.frame = self.window.bounds;launchView.contentMode = UIViewContentModeScaleAspectFill;
[self.window addSubview:launchView];
[UIView animateWithDuration:2.0f delay:0.0f options:UIViewAnimationOptionBeginFromCurrentState animations:^{  
    launchView.alpha = 0.0f; 
    launchView.layer.transform = CATransform3DScale(CATransform3DIdentity, 1.2, 1.2, 1);
} completion:^(BOOL finished) {
    [launchView removeFromSuperview];  
}];

布局文件(LaunchScreen)###

开发的App基本上都是支持iOS7以上了,所以没太用启动图了,Xcode 6是LaunchScreen.xib,到Xcode 7变成了LaunchScreen.storyboard,无可厚非,两者本质都是一样的。
如果Storyboard和Size Class玩得多同学还是喜欢布局文件作为启动图的方式吧,所以我的方式是获取LaunchScreen.storyboard里的ViewController,在把View提取出来加到UIWindow显示做动画即可。
这种方式的好处就是,获取大小就是屏幕的大小,而且只要你把不同屏幕的布局搞定了,系统会帮你生成好加在的启动页,这样就免去了判断和从新设置大小的麻烦,这样才是真适配嘛~

PS:记得给LaunchScreen.storyboard里的ViewController设置好Storyboard ID

UIViewController *viewController = [[UIStoryboard storyboardWithName:@"LaunchScreen" bundle:nil] instantiateViewControllerWithIdentifier:@"LaunchScreen"];
UIView *launchView = viewController.view;
UIWindow *mainWindow = [UIApplication sharedApplication].keyWindow;
launchView.frame = [UIApplication sharedApplication].keyWindow.frame;
[mainWindow addSubview:launchView];
[UIView animateWithDuration:0.6f delay:0.5f options:UIViewAnimationOptionBeginFromCurrentState animations:^{
    launchView.alpha = 0.0f;
    launchView.layer.transform = CATransform3DScale(CATransform3DIdentity, 1.5f, 1.5f, 1.0f);
} completion:^(BOOL finished) {
    [launchView removeFromSuperview];
}];

参考:http://www.jianshu.com/p/2f1149269cd0

你可能感兴趣的:(获取App启动页LaunchImage或LaunchScreen)