如何使用Launch Screen Storyboard

原文:http://useyourloaf.com/blog/using-a-launch-screen-storyboard/

背景

2020年4月开始,苹果拒绝接受launchImage启动方式的应用,强制使用Launch Screen Storyborad。所以步调加紧吧。

静态启动图片

启动图片是iOS加载App的时候系统响应的直观呈现。近几年,随着屏幕尺寸的增多,制作相应的静态图片就变成一件十分让人头疼的事。在下面,我列举了一些 启动图片的尺寸(尺寸包括状态条区域)。为了简洁,我省略了横屏的版本:

  • iPad 2 and iPad mini (@1x): 768 x 1024
  • iPad and iPad mini (retina @2x): 1536 x 2048
  • iPhone 4s (retina @2x) 640 x 960
  • iPhone 5 (@2x): 640 x 1136
  • iPhone 6 (@2x): 750 x 1334
  • iPhone 6 Plus (@3x): 1242 x 2208

好消息是,在Xcode 6 and iOS 8允许使用NIB或storyboard launch screen 文件。利用auto layout 和size classes的优势,一个单独的NIB或storyboard文件在runtime时可以自动的去创建启动图片集。这就意味着,你想在全屏模式下支持iPhone 6 和 iPhone 6 Plus的话就无需提供匹配的的启动图集或者如上面列举出现来的不同尺寸的静态图片

( 26-Dec-2014 更新: 一定要搞清楚,支持iPhone 6 and iPhone 6 Plus ,要求你提供启动图片集合,可以是静态启动图集(static launch images),也可以是启动图布局文件( launch screen file)).

使用启动图片文件

Xcode6在创建新工程时默认添加了一个LaunchScreen.xib文件。对一个已经存在的工程可以用Launch Screen 模板创建一个新的文件。(译者注:在Xcode7里,默认添加的是LaunchScreen.storyboard文件,笔者因此遇到过一个大坑LaunchImage和LaunchScreen.xib混用出现的坑

image

这一步将会在工程中添加一个NIB文件,你可以在初始化的启动屏上添加单个视图或者视图控制器。如果你有多个视图,那么你则需要放弃Launch Screen模板,应该添加一个storyboard。然后在target的工程设置里面指定启动图来源:

image

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

image

接下来,你可以在Interface Builder对启动视图进行布局,使autolayout和size classes作为必选项,为不同的屏幕创建匹配的图片。Xcode模板提供的风格,只是对app的名称和所有权进行了布局,这并不是一个最理想的范例。在你添加自己的视图之前,或许你想删掉它们:

image

你可以在Xcode中预览storyboard,或者在模拟器和真机上进行测试。尽管启动屏的展示的时间很短,但是你会发现,如果在App delegate的application:didFinishLaunchingWithOptions:方法中添加断点是有用的

Launch Screen 的局限性

系统在启动app之前装载启动文件,在这个过程中可能对app包含的一些文件产生限制(一些限制可能迫使你回退到 使用静态图片集):

  • app还没装载完毕,一些视图的层级结构还不存在,系统不能调用app中任何自定义的视图控制器去启动代码。
  • 你仅仅能使用标准的UIKit类,所以你可以用UIView或者UIViewController,自定义的子类则不可以。如果你尝试着去设置子类,将会得到一个“配置无效”的错误。
  • 启动文件仅仅能够用基础的UIKit视图,像UIImageView 和UILabel,不能使用 UIWebView。
  • 如果你用了storyboard,你可以指定多个视图控制器,但是仍旧有一些限制。例如,你可以在navagation或者tab bar controller嵌入几个视图控制器,但是一些更复杂的类,像UISplitViewController 并不起作用 (至少现在如此).
  • 本地化(译者注:我理解的是自己创建的,而非采用模板)启动图布局文件目前看起来并没有什么不好的影响。也许,你采用的最基本的本地化启动图布局文件可能是不在启动图上显示文字。
  • 你不能为iPhone和iPad指定不同的启动文件。因为auto layout 和size classes的局限性,如果这些设备有着显著不同的界面,就会出现问题。

如果你正在ios7系统上进行开发,那么你仍旧需要包含 静态启动图集。你可以包含启动图布局文件静态启动图集。那么,运行ios8系统的iPhone6将会使用启动图布局文件,而运行ios7系统的设备则回退使用 静态启动图集

Split View Controllers

如果你的根视图控制器是SplitViewControllers,至少在iOS8.1系统,你并没有太多的选择。如果你将SplitViewControllers添加到launch screen storyboard,它不会被装载。由于在iOS8.1中SplitViewControllers复杂度的增加,我怀疑在后续版本中也不会被支持。

除了回退去使用 静态启动图集,唯一能够选择的方式看起来只有放弃 分屏使用。例如,考虑一下接下来使用SplitViewController的iPhone和ipad的启动屏。在iphone(宽度较窄)设备上,初始化的屏幕仅展示主视图控制器(一个嵌入在Navigation Controller里的tableview controller)

image

在ipad(常规宽度)设备上,初始化后的启动屏在分屏控制器里展示的master and detail view controllers

image

这是一种常见的启动方式,但是在这种情况下,没有好的方法使用启动图布局文件.我的建议,即我能得到的最接近的方式是忽略启动屏,用一个嵌套在navigation controller的view controller 作为启动屏

image

尽管这种方式远远没有达到完美的地步,但是在适配(除了ipad分屏)所有设备用户初始化界面 方面多多少少做了贡献。呈现给用户的静态启动图集虽然效果足够好,但是自己不得不做出判断。

Runtime Generation (added 28-Dec-2014)

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

image

作为对比,下面的截屏显示了iPhone 6 Plus生成的启动图片

image



对于如何使用LaunchScreen自定义启动动画,大家可以参考通过LaunchScreen自定义启动动画
DEMO

作者:AimLay
链接:https://www.jianshu.com/p/77054dccafdb
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 151,829评论 1 331
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 64,603评论 1 273
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 101,846评论 0 226
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 42,600评论 0 191
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 50,780评论 3 272
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 39,695评论 1 192
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,136评论 2 293
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 29,862评论 0 182
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 33,453评论 0 229
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 29,942评论 2 233
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,347评论 1 242
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 27,790评论 2 236
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,293评论 3 221
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 25,839评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,448评论 0 181
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 34,564评论 2 249
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 34,623评论 2 249

推荐阅读更多精彩内容