http://www.cocoachina.com/ios/20151010/13601.html

iOS 9 的一个重大变化就是增加了多任务,这个多任务允许用户在屏幕上同时运行多个 app。有两种形态,Slide Over(滑动覆盖视图) 和 Splite View(分割视图)。

Slide Over View

这种形式下,用户可以从右侧划出一个窄的区域,在这个区域里展示了应用的列表,然后你可以选择打开一个,在这个区域里展示。它出现在你前面运行的程序之上,并且两个应用之间不会有任何相互操作和影响。

Split View

为了打开 splite view,用户要把(两个应用之间的)分割线拖到左边。用户自己来控制被垂直分隔开的2个应用的窗口大小。当 splite view 为当前状态时,没有前后台的概念,两个应用都是在前台的。

目前,splite view 仅适用于 iPad Air 2。

Enabling Multitasking in Your App

当你创建新项目时,多任务设置是默认开启的。如果要为一个老项目开启这个功能,则需要手动设置一下。下面是你在使用 iOS 9 SDK 的情况下,需要做的:

1. 允许全部的方向(Portrait, Upside Down, Landscape Left, Landscape Right)

2. 使用 Storyboards

设置(Opting Out)

当你具备了上面两个条件后,多任务才能在你使用iOS 9 SDK 编译时,被允许使用。如果想要编辑这个属性,在 info.plist 中指明 UIRequiredFullscreen这个 key 的值。

Auto Layout 的重要性

Auto Layout 在 iOS 6中首次被引入,它允许你通过设置约束而不是位置信息来控制UI的布局。 Adaptive Layout 是在 iOS 8中被引入,它把 Auto Layout 的能力提升了一个级别,允许你为不同尺寸的设备设置不同的约束。Size classes 可以根据 app 窗口的大小,确定一个相对的位置。

由于要多任务,你仍然可能有很多问题,需要在 iOS 9 上进行调解。

不要再使用 UIInterfaceOrientation 了

理论上,UIInterfaceOrientation 在多任务的情况下不在起作用。如果你想为一个在多任务中的app 确定他的 UIInterfaceOrientation, 你无法确认是否是在全屏状态下。比如说,你的应用在前台并且是横向的,尽管比纵向的会宽,但是(代码)仍然会给你返回为 UIInterfaceOrientationPortrait。

但有时候我们仍然需要根据方向来调整一下用户界面,怎么办呢?答案是,使用traitCollection.horizontalSizeClass。 他会给你 Size Class 的信息,你可以根据方向来调整应用中view 的布局。

尺寸变化事件

以前当旋转事件发生时,我们推荐使用 willRotateToInterfaceOrientation 和 didRotateToInterfaceOrientation方法,来响应。 在 iOS 8 里苹果介绍了 willTransitionToTraitCollection 和 viewWillTransitionToSize 两个方法。这些方法在 iOS 9里,对于多任务仍然有效,并且更重要了。你可以根据需求,来检测方向和手动比较宽高等。

键盘响应事件

以前,只有当你打开应用时,键盘事件才有效。现在,有可能仅仅是最上层的应用需要键盘,他就出现了。

某些情况下,出现键盘可能对你的应用并无影响。但有时,可能键盘会挡住你的应用的一块儿重要位置,这时 UIKeyboard 的通知就很重要了。  WillShow, DidShow, WillHide, DidHide, WillChangeFrame 和 DidChangeFrame 这些通知让你有能力处理此类问题。这些通知事件,在屏幕上出现的两个应用中都能接受到。

其他考虑因素

(多任务带来的)这些变化,让你必须要考虑的,并非仅仅是视觉改变。以前只有一个应用运行在前台,你可以使用大量的 CPU,GPU 和内存资源。但现在不同了,假如一个用户选择了 split view 或者 slide over view ,于此同时,他还利用 iOS9 的画中画的特性,观看一个视频,就是三个应用来分享这些资源了

为了更好的用户体验,系统会管理资源的占用,并且会终止掉占用资源过多的 app。--- 来自苹果 iOS9 多任务开发文档。

你需要对你的应用在不同情况下,进行更多测试来却确保有信心达到预期的效果,并确保没有占用多余的资源。

延伸阅读

想要了解更多关于 iOS9 多任务的内容,请阅读开发者中心的文档 Adopting Multitasking On iPad。我同样推荐,观看WWDC 2015 的session 410 Continuous Integration and Code Coverage in Xcode

iOS 9 学习系列:Split Screen Multitasking的更多相关文章

  1. iOS/iPhone学习系列、代码教程

    part 1--入门: 1. xcode 版本下载 以及 iphone sdk 下载: 最新版本在此下载: http://developer.apple.com/devcenter/ios/index ...

  2. iOS 9学习系列:打通 iOS 9 的通用链接(Universal Links)

    在WWDC 2015 上, Apple 为 iOS 9 宣布了一个所谓 通用链接 的深层链接特性, 视频地址为 [无缝链接到您的 App].虽然它不是一个必须实现的功能, 但还是需要引起一些注意. 在 ...

  3. iOS 9 学习系列: Xcode Code Coverage

    Code coverage 是一个计算你的单元測试覆盖率的工具. 高水平的覆盖给你的单元測试带来信心.也表明你的应用被彻底的測试过了. 你可能写了几千个单元測试,但假设覆盖率不高.那么你写的这套測试可 ...

  4. iOS 9 学习系列:UIStack View

    http://www.cocoachina.com/ios/20150921/13492.html 在 iOS9 中,Apple 引入了 UIStackView,他让你的应用可以通过简单的方式,纵向或 ...

  5. iOS 9 学习系列:Storyboard References

    http://www.cocoachina.com/ios/20150922/13474.html 如果你曾经使用 interface builder 创建过一个复杂.界面非常多的应用,你就会明白最后 ...

  6. iOS 9 学习系列:UIStack View (转载)

    作者:Nathan_Bao 地址:http://www.jianshu.com/p/1991e6c2881a 在 iOS9 中,Apple 引入了 UIStackView,他让你的应用可以通过简单的方 ...

  7. iOS学习系列 - 扩展机制category与associative

    iOS学习系列 - 扩展机制category与associative category与associative作为objective-c的扩展机制的两个特性,category即类型,可以通过它来扩展方 ...

  8. 开篇:软件项目的整个流程 - IT软件人员学习系列文章

    这段时间闲来无事,就在总结以前的项目经验,然后写成博客的形式以进行记录.本文就对<IT软件人员学习系列文章>做个开篇吧. 对于IT软件的开发来说,无外乎B/S.C/S和Android.iO ...

  9. 1、HTML学习 - IT软件人员学习系列文章

    本文做为<IT软件人员学习系列文章>的第一篇,将从最基本的开始进行描述,了解的人完全可以跳过本文(后面会介绍一些工具). 今天讲讲Web开发中最基础的内容:HTML(超文本标记语言).HT ...

随机推荐

  1. SQL2005自动备份,定期删除的维护计划及自动定期清除日志

    作为一名DBA,他们最常见的日常任务是: 1)定期完成数据库的完全备份或差异备份.2)定期清理备份文件,因为存储空间有限,可能只需要保存一个时期段内的文件(比如一周内或一月内). 而如何做到这两点呢? ...

  2. 我是如何在实际项目中解决MySQL性能问题

    可能是本性不愿随众的原因,我对于程序员面试中动辄就是考察并发上千万级别的QPS向来嗤之以鼻,好像国内的应用都是那么多用户量一样,其实并发达到千万,百万以上的应用能有几个? 绝大多数的程序员面临的只是解 ...

  3. HashMap基础知识

    HashMap 简介 HashMap 主要用来存放键值对,它基于哈希表的Map接口实现,是常用的Java集合之一. JDK1.8 之前 HashMap 由 数组+链表 组成的,数组是 HashMap ...

  4. python-基础-基础知识-变量-选择-循环

    1 基础知识 1.1 注释的分类 1.2 变量以及类型 变量定义 num1 = 100 #num1就是一个变量,就好一个小菜篮子 num2 = 87 #num2也是一个变量 result = num1 ...

  5. CString转const char

    CString转换成const char      需要考虑一个因素: 你使用是否为unicode 不使用unicode: CString  Cstr("aaaaaaa"); co ...

  6. 过滤html标签的一个函数

    str_replace(array(' ', '&', '"', ''', '“', '”', '—', '<', '>', '·', '…', '&'), ar ...

  7. 更改电脑用户名(可更改C:\Users\用户名)

    参考:http://blog.csdn.net/zhang_jinhe/article/details/40624847 假设我们需要将帐户A改名为B. 首先我们需要用另一个管理员帐户C登陆系统. 1 ...

  8. hdu 1269 (强联通分量Tarjan入门)

    迷宫城堡 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submis ...

  9. GIT → 01:学习版本控制的原因

    1.1 没有版本控制出现的问题 备份多个版本,浪费存储空间,花费时间长. 难以恢复至以前的历史版本,容易引发BUG,解决代码冲突困难. 难于追溯问题代码的修改人和修改时间.修改内容.日志信息. 项目升 ...

  10. spring基于xml的声明式事务控制配置步骤

    <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...