大多数浏览器和
Developer App 均支持流媒体播放。
-
多任务处理 App 中的窗口管理
深入了解多任务处理 app 中窗口管理的细节,包括如何适当地处理创建、刷新和关闭窗口。听取关于何时刷新窗口内容的最佳做法,并学习如何确保 app 的视觉状态在切换器中保持最新。
资源
-
下载
(多任务App中的窗口管理) (激活、刷新和销毁窗口) 大家好 我是Giovanni Tarducci 来自系统UI SpringBoard团队 今天我很高兴跟大家分享 iPadOS上的窗口管理 为此我们引入了三个新API 可以分别激活、刷新或销毁 任意情景会话 但让我们先来看一个 如何使用这些API的演示 在一个我们一直在设计的app中
好的 我们叫它Clown Town 这为聚会寻找小丑提供了一个新方法 打开它是一个全屏地图 显示我网络中所有的小丑们 我可以轻触任意一个标记了解详情
它的实现也非常直观 详情视图控制器完全了解 如何显示某个指定ID的小丑 而地图视图控制器把一切 陈述、动画、 和姿势都委托给了UIKit 通过视图呈现 视图控制器激活了API 嗯 关于多任务的改进 我们可以把这个委托模型 提升到一个新的层级 并免费获取强大的新功能 需要在结账时收取税费 因此我们的确需要从添加 “在新窗口中打开”按钮开始 在详情视图中 我们所有的用户都将发现 这个很棒的新功能 当轻触它时 我们会调用 新的请求情景会话激活API 从而在辅助的专用窗口中 打开这个小丑页面 让我们来做一下 我已经可以浏览地图、 结账以及与其他小丑们对比了 但不仅如此 我们现在可以让整个系统 都为我们服务 我们可以重新调整窗口大小 四处移动窗口 总是打开新窗口 我这边的窗口 在切换器中有自己的位置 现在我可以把这个小丑滑过去 移动它 并存起来 也许要打开其它的详情窗口 Crusty 还有最后一个
Mr. Happy
好的 那么通过滑动app 我可以查看所有的窗口 甚至可以在它们之间快速地切换 就像那样 我甚至可以返回到 位于地图旁边的一个大窗口 现在让我们暂停一下 我们的确实现了全部这些功能 通过为系统添加委托、描述、 动画以及更多 目前通过 单一的请求情景会话激活API 现在我注意到这个Mr. Happy 有一个星的评级 很可能不是一个很好的小丑 因此让我们移除他 关掉他的窗口 通过新的请求情景会话销毁API 这是我为右上角的按钮调用的 让我们做一下 他消失了 现在我记得切换器中有一个小丑 拥有五星评级 那么让我们再次打开她
请注意她并不是复制出来的 这是Clown Town的政策 它的实施很简单 就是要求请求情景会话API激活 一个现有会话而不是一个新会话
我甚至可以追踪她何时可用 系统会查看并发现她是否可用 并且我可以通过绿色导航栏来呈现 同时会在左侧出现一个立即预定按钮
如果她的可用性发生变化 我会收到一个通知 我将更新这个UI 让导航栏变成红色 并且我会调用 新的请求情景会话刷新API 用于更新UI的快照 其它不变 当它在切换器中显示时 但我还没有做出决定 那么让我们都追踪一下 就像这样
如果我可以在app后台做一些事情 做一些其它事 也许是把这个app推荐给我的朋友们 并且显示我当前已经拥有的收藏 但我已经收到了通知说 其中有一些不再可用了 我忘记了他们的名字 那么让我使用app快照 浏览我的所有窗口 就是这样 快照已经更新了 非常棒 因为我可以在这里直接管理我的窗口 向上滑动几次就搞定了 看起来这些小丑们流动性很大 那么让我们继续 预定BuBu LuBu 然后我们就可以准备聚会了
哎呦 稍后见Clown Town
好的 那么…
谢谢
那么让我们查看API的激活会话功能
首先激活会话 仅用于响应直接的和本地的用户交互 用户需要触摸屏幕来触发它
并且你要通过调用 新的请求情景会话激活API 在UI app上 要么激活一个现有会话 要么激活一个新会话
在Clown Town中 当我们首次启动它时 UIApplication只有一个打开的会话 就是那个显示地图配置的会话
窗口中显示了我们的整个视图层级
当按下打开新窗口按钮时 通过委托 详情视图控制器 会接触到地图视图控制器 并呈现它 并且地图视图控制器 会调用我们在app委托上 所添加的方法
因为我们有不复制政策 我们会查看 这个指定小丑的全部现有会话 因为是首次启动 我们没有任何发现 那么我们在运行时会传输nil 把nil传给这个参数 请求创建一个全新的情景会话
然后我们要为这个小丑 创建一个userActivity 并通过UIKit 把userActivity返回给我们 我们稍后会在委托链中看到
选项对象可以让我 指定一个请求情景 就是用户会在哪里发起这个请求 系统使用这个信息来避免 用激活的请求情景 替换requestingScene 还有就是为了导航 我们现在可以调用API 显示了新窗口 同时创建了新的会话等级
正如我所提到过的 有两个关键方法你们一定很想实施 以便让你的app决定 实际要创建什么 以及如何配置
那么让我们退一步 返回到我们调用API时 我们这样做时
UIKit会创建一个全新的情景会话 并让你为其指定一个配置 通过调用用于连接情景会话的配置 在app委托上 你一定很想实施这个 在这里你可以检验用户活动 它会通过UI情景连接选项返回给你 让你选择一个会话 对于我来说是详情配置 现在如果你的配置 指定了情节串联图版 正如我所推荐的 在这点上 UIKit会继续并创建整个视图等级 并且你只需要配置就可以了 你可以通过实施 sceneWillConnectToSession来实现 在你的情景委托上 还是在那里 你可以发现你的用户活动 以及连接选项 并且你可以为其 配置窗口和视图控制器等级
那是一个新会话 那么现有会话呢? 如果会话仍然存在 我们会直接进入情景委托 并且如果会话在其间断开连接 我们会调用sceneWillConnectToSession 但是如果情景仍然保持连接 我们将进入continueUserActivity 这两个你一定都想实施 总的来说 激活会话仅用于 响应直接用户请求 要么激活新会话 要么激活现有会话 并且你想实施 你的app和情景委托方法 以便配置两个情景以及活动窗口
现在谈谈刷新会话 刷新是在app中与用户相关的更新 举几个例子 可以是在同一个设备上 显示并运行多个窗口 用户可能从一个窗口 或甚至是另一台设备上修改了它们 现在你希望能保持同步 你希望它们的呈现保持更新 或者你只想获取新数据 并对用户可见 或你想更新一切情景和会话元数据 正如我们即将看到的
你这样做了 通过在任意时间 在UIApplication上调用 requestSceneSessionRefresh API 通过传输你所希望刷新的会话
这个API究竟会让你更新哪些东西? 你可以给这个会话更新 状态恢复用户活动 你可以更新情景激活条件 并且你的UI 最终又会在快照中被捕捉到
正如我们在Clown Town中所看到的 由于那些更新的快照 我们会感觉app在切换器中是活跃的 并且我们还可以 信心满满地处理输入数据 而不需要导航到每一个会话 只是为了查看是否已连接或已更新 即便我们压根就不再需要它们了
在架构注释中 你想监测相关模型变更 从而调用API 无论是在感兴趣的视图控制器中 还是在长周期对象中 因为如果场景仍然保持连接 无论是在前台或是后台 它都可以自己收到通知 并且调用API 这将会在内部实现
如果情景已经断开连接 将不会再显示视图控制器 因此长周期对象可以介入 解决这个问题并在它自己的位置上 调用刷新API 然后情景就会在后台保持连接 并且视图控制器可以进行自我更新 并捕捉快照
总的来说 你想在app中 刷新用户相关的更新 让布局时间缩短 因此我们可以迅速捕捉快照 并且不依赖于它的立即执行 系统保留在稍后 实施这个请求的能力 如果必要的话
现在讲销毁会话 又叫做带着样式离开
你针对直接用户请求销毁会话 或者如果你有窗口 是一个辅助窗口 用于显示一些数据 一些项目 而用户已经从其它地方把这些删掉了 从另一个窗口或甚至是另一台设备
你可以通过在任意时间 在UIApplication上调用 requestSceneSessionDestruction API实现 它会处理你希望销毁的会话 还有一个选项对象
这个选项可以让你指定一个 DismissalAnimation 是系统需要考虑的 如果情景恰好当时处于前台
现在让我讲清楚点 会话将会消失 再也不会出现 但动画允许你了解用户关掉它的意图 那么要选择哪个呢? 主草图是一个很棒的范例 当主草图未经保存就被取消时 用户就是很明确地要求 销毁其中的内容 这很常见 当关掉窗口时 正如我们在Clown Town中 所看到的那样 在这些情况下 你选择标准动画 用于了解这个意图
当发送草稿时 用户并没有要求销毁他的内容 那么会话将会被销毁 作为用户接受 会话的最终目的的副作用 那么对于邮箱来说就是发送邮件 在Clown Town例子中就是预定小丑 如果你处于追踪模式中的话 你选择交付就是 用户已批准会话的最终目的
现在当草图被取消和保存时 用户并没有要求销毁他的内容 那么会话将会被销毁 作为用户拒绝立即采取行动的副作用 你选择拒绝 在这些情况中 是告知会话的最终目的 尚未被实现 (会话销毁动画衰退) 总结一下 你为了响应用户请求而销毁会话 无论是本地还是远程 并且你选择动画样式 用于最好地了解用户的意图
总的来说 我们了解了 如何通过这些新API 授权给用户的操作 并且你可以把复杂的操作委托给系统 同时获取能让你的用户 轻松发现的强大的新功能 谢谢 (要了解更多信息请查看 developer.apple.com/wwdc19/246)
-
-
正在查找特定内容?在上方输入一个主题,就能直接跳转到相应的精彩内容。
提交你查询的内容时出现错误。请检查互联网连接,然后再试一次。