LaunchImage在APP初始化完以后会当即消失并显示APP的界面,可是有的时候咱们不但愿它这么快就消失(好比有的人但愿有个过渡效果 有的人但愿等某些设置或者数据加载完以后再消失),这也很简单,咱们只要本身把LaunchImage再显示出来而且置顶就OK了。orm
不过咱们配置了那么多适用于不一样屏幕分辨率的LaunchImage 如何获取适合于当前屏幕分辨率的LaunchImage呢?资源
普通的办法是 把全部LaunchImage加入到工程并根据屏幕分辨率来命名 好比(640_960.png 640_1136.png …) 而后在程序中用代码拼接出对应的文件名 并引用rem
可是这种办法比较原始 并且万一之后苹果又出了一些其余分辨率的设备 或者启动图发生变化的时候 又须要人工的修改工程配置 不太好 并且还须要多占一份资源(APP的容量又变大啦)get
而stackflow上的Cherpak Evgeny分享了一个更好的办法 直接读取NSBundle中的设置 便可获取当前适用的LaunchImageanimation
我以上面的图为例写了个演示代码:it
CGSize viewSize = self.window.bounds.size;io
NSString *viewOrientation = @"Portrait"; //横屏请设置成 @"Landscape"form
NSString *launchImage = nil;transform
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:1.0f
delay:0.5f
options:UIViewAnimationOptionBeginFromCurrentState
animations:^{
launchView.alpha = 0.0f;
launchView.layer.transform = CATransform3DScale(CATransform3DIdentity, 1.2, 1.2, 1);
}
completion:^(BOOL finished) {
[launchView removeFromSuperview];
}];