因产品需求,要在圣诞节和元旦期间分别用不同的图片作为启动页,元旦过后还原为之前的图片。一番尝试之后,虽没有很好的完成需求,但做以下总结,希望对读者有所帮助。
普通设置启动页
•方式一 用Images.xcassets
图一.png
将Launch Screen File 栏中的LaunchScreen删除,然后 点击 图中箭头所指,
图二
.png
点击Migrate之后去到Images.xcassets文件中会看到
图三.png
此时拖入准备好的相应尺寸的图片,运行即可,如果在某机型上不显示,请检查图片是否缺少对应的尺寸。
注:如不显示,可先执行Clean,在将模拟器或真机上的程序卸载后重新安装
•方式二 通过LaunchScreen.storyboard设置
如图一所示,不点击Use Asset Catalog且Launch Screen File 栏中选中LaunchScreen.storyboard
然后在LaunchScreen.storyboard的
图四.png
启动页即可在LaunchScreen.storyboard中设置,可用label等控件自己布局,亦可直接用图片。所用图片不必各种机型的尺寸都需要,一张即可。但是!!此方法只适用于支持iOS8和以后的系统,如果支持iOS7的话,测试是没有问题,但在提交到App Store时会报以下错误:
图五.png
注:如不显示,需要Clean 或将模拟器中程序删除重新安装。亲测有效!
为完成文章开始所说需求,做了以下尝试:
首先以上两种方式都不使用,测试发现程序在屏幕上下各留出黑框。所以,再不使用Images.xcassets的情况下LaunchScreen.storyboard 的 use as Launch Screen 一定要选中。
想要根据时间来设置启动页,只能在代码中操作,于是在didFinishLaunchingWithOptions
方法中进行操作:
UIView *launchView = [[[NSBundle mainBundle]loadNibNamed:@"LaunchScreen" owner:nil options:nil]firstObject];
launchView.backgroundColor = [UIColor redColor];
launchView.frame = self.window.frame;
[self.window addSubview:launchView];
UIImageView *imgView = [[UIImageView alloc]initWithFrame:launchView.bounds];
imgView.image = img;
[launchView addSubview:imgView];
[UIView animateWithDuration:3.0 animations:^{
launchView.alpha = 0.0;
} completion:^(BOOL finished) {
[launchView removeFromSuperview];
}];
但是效果差强人意。以为LaunchScreen.storyboard是在程序一启动就加载的,所以程序一启动会显示白屏(未在LaunchScreen.storyboard中设置图片),然后再出现代码所写效果。
不过看了几个大厂的app,他们实现启动页之后的广告页也是这个思路!
希望文章对你有所帮助,如有大神有更完美的解决方案请多多赐教。