iOS开发时如何使用 Launch Screen Storyboard

2023-11-08

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

静态启动图片

启动图片是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混用出现的坑


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


2014-12-24-005.png

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


2014-12-24-003.png

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


2014-12-24-004.png

你可以在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)


2014-12-24-iphone.png


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


2014-12-24-ipad.png

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


2014-12-24-006.png

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

Runtime Generation (added 28-Dec-2014)

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


2014-12-28-001.png


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


2014-12-28-002.png

---------------------

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



文/Flying_Einstein(简书作者)
原文链接:http://www.jianshu.com/p/77054dccafdb
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

iOS开发时如何使用 Launch Screen Storyboard 的相关文章

随机推荐

  • c++单链表的简单实现(内含实现代码)

    考研报名等待之时闲来无事 写了一个简单的单链表 简单实现了以下功能 头插法建立单链表 按序遍历链表 单链表原地排序 不使用额外的空间 单链表按序删除 单链表原地倒置 附上代码如下 节点结构体定义 typedef int ElemType t
  • uniapp uview内置样式记录

    uview内置样式 文字省略 u line 1 u line 2 u line 3 u line 4 u line 5五个类名在文字超出内容盒子时 分别只显示一行 两行 三行 四行 五行 省略号 定位 uView内置了关于相对和绝对定位的两
  • 基于springboot的旅游信息管理系统完整源码

    基于springboot的旅游信息管理系统完整源码 技术栈 jdk1 8 mysql8 maven3 6 0 idea 功能模块 旅游路线 旅游景点 旅游酒店 旅游车票 旅游保险 旅游策略 订单管理 留言管理 数据分析等等 项目下载 htt
  • Matlab 如何生成一个[a,b]范围内随机整数的2种方法【已经解决】

    如何使用MATLAB生成一个 a b 范围内的随机整数 比如 随机生成 9 13 范围内的一个 或多个 整数 首先感谢 slandarer的指正 现已经更改 round 为四舍五入取整 而非向上取整 方法1为一个较为不错的方法 方法1 ra
  • 游戏开发-虚幻引擎天源了 [分享]

    https www unrealengine com zh CN 虚幻引擎4现在可供每个人免费使用 而且所有未来的更新都将免费 您可以下载引擎并将其用于游戏开发的各个方面 包括教育 建筑以及可视化 甚至虚拟现 实 电影和动画 当您发布游戏或
  • 计算机图形学入门(十六)-光线追踪(渲染方程)

    本部分主要介绍了渲染方程的逐步完善和简单的推导过程 从BRDF开始 到反射公式的推导再到渲染方程的完善 最后展示了实际渲染的例子 学习视频 GAMES101 现代计算机图形学入门 闫令琪 哔哩哔哩 bilibilihttps www bil
  • leaftlet 显示个性化图标、旋转图标

    1 引用leaftlet 高版本 比如1 8 3 在map js 中定义图标 L marker geo rotationAngle 270 icon L AwesomeMarkers icon icon awesomeIcon prefix
  • 创建匿名线程的5种方式

    package mythread 使用匿名内部类开启线程 public class Demo02anonymous thread public static void main String args 方式一 使用匿名内部类创建线程的子类对
  • java 是静态语言还是动态_java是动态语言还是静态语言?,

    java是动态语言还是静态语言 Java是动态语言还是静态语言 Java是一种静态语言 Java是编译时确定的变量类型 不能在运行时更改 在类型转换中也是强制的 例如 当大规模整数类型转换为小规模整数类型时 必须进行强转换 比如int必须强
  • 【TVM 学习资料】用 Schedule 模板和 AutoTVM 优化算子

    本篇文章译自英文文档 Optimizing Operators with Schedule Templates and AutoTVM 作者是 Lianmin Zheng Chris Hoge 更多 TVM 中文文档 访问 TVM 中文站
  • torch的GLU函数

    import torch nn as nn nn GLU GLU门控线性单元的描述 API
  • memcached查看所有的key

    memcached list all keys 1 打开命令窗口输入 gt telnet 127 0 0 1 11211 2 查找 输入 stats items 回车 显示各个slab 中 item 的数目和存储时长 最后一次访问距离现在的
  • 企业消息转发服务器,Python构建企业微信自动消息转发服务端

    目前有在项目分组 就小组成员中 微信群消息回复较多的情况下 想根据组来转发特定消息 包含文字 图片 语言等 在此只是自己实现仅供参考 可以根据自身需求修改更多功能 二 代码 2 1 企业微信相关信息 企业ID corpid 自建应用appi
  • ThinkPHP 的join关联查询不使用默认的表前缀

    关于ThinkPHP 的关联查询 官方文档是这样描述的 上述join函数中需要三个参数 分别是 join 要关联的 完整 表名以及别名 支持三种写法 写法1 完整表名或者子查询 gt 别名 写法2 完整表名 别名 写法3 不带数据表前缀的表
  • 100 个 Python 小项目源码,总有一个用得到

    学习 Python 会有这么一个阶段 太简单的程序看不上眼 复杂的开源项目又有点力不从心 这个时候 你就需要接触点简单的 Python 小项目来提升 Python 技能 碰巧 GitHub 上有这样一个项目 收集了 100 个简单的 Pyt
  • <并发编程>学习笔记------(一) 并发相关理论

    前面 并发编程可以总结为三个核心问题 分工指的是如何高效地拆解任务并分配给线程 同步指的是线程之间如何协作 互斥则是保证同一时刻只允许一个线程访问共享资源 并发相关理论 可见性 原子性和有序性 核心矛盾 CPU 内存 I O 设备的速度差异
  • OpenWrt通过终端查询版本

    一 cat etc banner 二 cat proc version 三 cat etc openwrt release 四 uname a 五 opkg version
  • go操作数据库Null类型转换失败问题

    sql NullString 解决数据库中null值的问题 go操作DB需要注意的
  • 向MySQL数据库表内导入txt和csv文件数据

    本文总结了在CentOS7上使用 LOAD DATA
  • iOS开发时如何使用 Launch Screen Storyboard

    原文 http useyourloaf com blog using a launch screen storyboard 静态启动图片 启动图片是iOS加载App的时候系统响应的直观呈现 近几年 随着屏幕尺寸的增多 制作相应的静态图片就变