之前应用启动图都是通过Assets.xcassets
新建LaunchImages
来设置的。虽然也很方便,但每次都需要UI给出很多各种屏幕尺寸的图,其实每张图内容元素都一样,仅仅是尺寸不一样,这样不但占用应用安装包体积,对UI设计及开发效率都是有影响的(只要启动图内容调整了,意味着整体需要替换)。
LaunchScreen.storyboard
是Xcode7
之后出的一个文件,并且每次新建项目的时候会默认创建。这个文件时用来替代之前设置启动图方式的,由于是IB
系列,所以适配工作相对就很轻松了。
界面绘制
既然是IB
,我们可以尝试在界面上放几个视图看下效果;
运行后发现效果和我们设置的界面一样,那是不是意味着我们可以关联一个ViewController
?
答案是否定的,因为Xcode
限制关联任何控制器。
我们可以尝试下:
新建LaunchScreenViewController
,在IB
中关联,编译就会报错,提示不可以设置自定义类。
关联Storyboard
界面设置完成后,需要配置启动图关联文件是哪个。如果没有设置,默认是LaunchScreen.storyboard
。
从上图可以看出,我们可以完全新建一个Storyboard
替代默认的LaunchScreen.storyboard
。但有一个注意点,如果是新建的Storyboard
,需要我们手动修改是否把当前Storyboard
作为启动图使用。
探究原理
LaunchScreen.storyboard
的原理其实很简单,就是在程序首次运行的时候,把LaunchScreen.storyboard
描述的界面进行截屏,并保存到沙盒中,等下次程序启动的先从沙盒中查找截屏图片,找到就显示,如果没有找到就继续截屏保存。
编译运行,生成当前屏幕尺寸的截屏(有横屏和竖屏):
我们尝试把截图全部删除,再运行应用:
竖屏状态
横屏状态
通过试验示例我们发现,生成截屏的时候会根据当前设备旋转状态进行截屏,并且根据当前设备尺寸生成对应大小的图片。