ios8以后设置启动图

iOS8之前启动图使用的是静态启动图片

启动图片是iOS加载App的时候系统响应的直观呈现。近几年,随着屏幕尺寸的增多,制作相应的静态图片就变成一件十分让人头疼的事。常用机型启动图片的尺寸列举:

型号

尺寸

iPhone 4s

640 x 960

iPhone 5

640 x 1136

iPhone 6 & 7

750 x 1334

iPhone 6Plus & 7Plus

1242 x 2208

Xcode 6 & iOS8开始允许使用NIB或storyboard launch screen 文件加载启动图.

利用auto layout 和size classes的优势,一个单独的NIB或storyboard文件在runtime时可以自动的去创建启动图片集。这样支持多尺寸屏幕时,无需提供上面列举的不同尺寸的静态图片.

1.创建.xib/.storyboard 文件

Xcode6在创建新工程时默认添加了一个LaunchScreen.xib文件。对一个已经存在的工程可以用Launch Screen 模板创建一个新的文件。

这一步将会在工程中添加一个NIB文件(在Xcode7里,默认添加的是LaunchScreen.storyboard文件),可以在初始化的启动屏上添加视图或者视图控制器。

2.设置plist文件 这一步将会把键 Launch screen interface file base name(UILaunchStoryboardName)加到应用的plist 文件中

3.自定义布局

在Interface Builder中可以对启动视图进行布局.将autolayout和size classes作为必选项,可以为不同的屏幕创建匹配的图片。Xcode模板提供的风格,只是对app的名称和所有权进行了布局,可以添加或删除模板上的控件来自定义加载界面.

默认模板效果图:

Launch Screen 的局限性

系统在启动app之前装载启动文件,在这个过程中可能对app包含的一些文件产生限制:

1.由于app还没装载完毕,一些视图的层级结构还不存在,系统不能调用app中任何自定义的视图控制器去启动代码.因此仅仅能使用标准的UIKit类,所以可以用UIView或者UIViewController,自定义的子类则不可以。如果尝试着去设置子类,将会得到一个“配置无效”的错误。

2.启动文件仅仅能够用基础的UIKit视图,像UIImageView 和UILabel,不能使用 UIWebView。 如果你用了storyboard,你可以指定多个视图控制器,但是仍旧有一些限制。例如,你可以在navagation或者tab bar controller嵌入几个视图控制器,但是一些更复杂的类,像UISplitViewController 并不起作用 (至少现在如此).

另外,尽管苹果文档中并没有清楚地说明,但需要的启动图片在runtime时被生成了。在WWDC 2014 Platform State of the Union上被简短的提到过。可以通过App在真机或者模拟器上生成的文件夹证实。被特定设备需要的启动图被缓存在Library/Caches/LaunchImages。