【iOS】LaunchScreen.storyboard原理

之前应用启动图都是通过Assets.xcassets新建LaunchImages来设置的。虽然也很方便,但每次都需要UI给出很多各种屏幕尺寸的图,其实每张图内容元素都一样,仅仅是尺寸不一样,这样不但占用应用安装包体积,对UI设计及开发效率都是有影响的(只要启动图内容调整了,意味着整体需要替换)。

LaunchScreen.storyboardXcode7之后出的一个文件,并且每次新建项目的时候会默认创建。这个文件时用来替代之前设置启动图方式的,由于是IB系列,所以适配工作相对就很轻松了。

界面绘制

既然是IB,我们可以尝试在界面上放几个视图看下效果;

运行后发现效果和我们设置的界面一样,那是不是意味着我们可以关联一个ViewController
答案是否定的,因为Xcode限制关联任何控制器。

我们可以尝试下:
新建LaunchScreenViewController,在IB中关联,编译就会报错,提示不可以设置自定义类。

关联Storyboard

界面设置完成后,需要配置启动图关联文件是哪个。如果没有设置,默认是LaunchScreen.storyboard

从上图可以看出,我们可以完全新建一个Storyboard替代默认的LaunchScreen.storyboard。但有一个注意点,如果是新建的Storyboard,需要我们手动修改是否把当前Storyboard作为启动图使用。

探究原理

LaunchScreen.storyboard的原理其实很简单,就是在程序首次运行的时候,把LaunchScreen.storyboard描述的界面进行截屏,并保存到沙盒中,等下次程序启动的先从沙盒中查找截屏图片,找到就显示,如果没有找到就继续截屏保存。

编译运行,生成当前屏幕尺寸的截屏(有横屏和竖屏):

我们尝试把截图全部删除,再运行应用:
竖屏状态

横屏状态

通过试验示例我们发现,生成截屏的时候会根据当前设备旋转状态进行截屏,并且根据当前设备尺寸生成对应大小的图片。