大多数浏览器和
Developer App 均支持流媒体播放。
-
AppKit 中的新功能
探索使用 AppKit 开发 Mac app 中的最新改进。我们将向您展示如何使用新控制功能和 SF Symbols 3 增强您的 app 设计,使用 TextKit 2 构建强大的文本体验,并在您的 app 中利用最新 Swift 功能。
资源
相关视频
WWDC21
-
下载
♪低音音乐声♪ ♪ 杰夫纳多:嗨 欢迎来到 《AppKit的新功能》 我是杰夫纳多 我在AppKit工作 我有一些很棒的更新要与你分享 macOS Monterey为Mac app提供了 一些很棒的新功能和改进 此版本确实对每个人都有好处 包括我们用户界面设计的更新 许多控件的增强 SF Symbols的重大更新 名为TextKit 2的全新文本引擎 强大的新Swift语言功能 以及快捷键的自动化 现在Mac上已经可以使用 让我们从macOS 用户界面设计的 一些更新开始 macOS BigSur首次亮相了 针对整个系统范围的重新设计 对此的反应令我们感到非常兴奋 在短短几个月内 许多我们最喜欢的app 都更新了 采用新的设计 在macOS Monterey中 我们一直在不断地迭代 和完善这个新设计 因此你会注意到 整个系统中有一些新变化 其中一些变化很大、很明显 例如弹出窗口现在出现和消失的时候 带有全新的动画 或当你点击滑标时 现在会平顺地滑动到点击位置 还有更多细微的变化 例如工具栏控件中的精确指标 以及搜索按钮上的弹簧加载支持 因此可以轻松拖入文本和标记 并增加表格部分之间的间距 以提高清晰度 我们不断地迭代和改进新设计 连最小的细节都不放过 这让我想到了一些控制增强功能 可以使用它们来完善你自己的设计 第一个重要的是控制着色 我们启用了单个按钮 分段控件和滑标的自定义着色 每个控件都使用以下API之一 接受自定义色调颜色:bezelColor selectedSegmentColor 和trackFillColor 我们在macOS Sierra中 引入了这些API 以允许在触控栏中为各个控件着色 从macOS Monterey开始 也可用于窗口内控件 重述一下 大多数控件 使用强调色绘制 颜色可在系统偏好设置中进行配置 这让大家能为他们的Mac设置主题 以匹配他们喜欢的颜色 多色选项允许每个app选择 自己的自定义颜色 对于普遍主题 你可以在app的资产目录中 选择自定义强调色 新的着色API提供了一种方法覆盖 特定控件的颜色 这对于你想要应用 语义上有意义的颜色的控件非常有用 例如 如果你的app使用特定的橙色 来区分预购和正常购买 你可以使用有色按钮强化这种设计 另一个例子是视频会议app 其中的开始和结束按钮 为执行app中两个最有意义的操作 将它们涂成绿色和红色 可以突出重要性 并且可以让它们的功能一目了然 一个重要的注意事项是 着色按钮在每个活动状态下 始终显示其色调 不像普通按钮的白色或灰色 这会让着色按钮成为焦点 但是 在设计时注意 不要与默认按钮混淆 默认按钮 也使用彩色外观 最后 重要的是 不仅仅使用颜色 来传达控件的用途 你需要确保那些难以 区分颜色的人仍然可以轻松识别 给定控件的用途 所以一定要提供清晰的标签或图标 另一个重要的按钮设计更改 是按钮不再使用点击时的强调色 突出显示 这使它们与其他可点击元素保持一致 例如分段控制段、滑标旋钮和步进器 这是一个重要的变化 因为如果你正在执行任何自定义绘图 并在强调显示时 假定具有彩色外观 例如 如果你选择 在顶部绘制白色内容 它在macOS Monterey上 看起来可能不正确 你可以使用 internalBackgroundStyle属性 来驱动你的绘图决策 而不是检查突出显示状态 这个属性反映了按钮边框的 基本样式 因此对于无色状态 它始终会返回.normal 对于那些彩色强调状态 它将返回.emphasized 例如有色按钮、默认按钮 和切换到“开”状态的按钮 最后 我们更新了 按钮的灵活按下样式 以前称为一般方形 作为可变高度的按钮 它现在支持与普通按钮 相同的所有配置 这代表它可以作为 默认按钮 并且你可以为它着色 角半径和内边距现在 与每个控件大小的标准按钮相匹配 因此它们非常适合你的其他控件 但它们的垂直可调整大小设计 代表它们可以容纳更大的图标 或带有换行符的文本 虽然大多数按钮应该继续 使用标准的固定高度样式 但当你需要容纳更高的内容时 这种新扩展的样式为特殊情况 提供了一些灵活性 另一个非常重要的控件更新 是选项键盘快捷键的自动本地化 世界上有很多键盘排版 这会使本地化键盘快捷键 变得相当复杂 某些组合键在某些键盘上很难使用 而有些则根本无法输入 此外 一些方向性键盘快捷键 确实应该在从右到左的语言中镜像 好消息是 在macO Monterey中 AppKit可以帮你做到这一点 下面举例一个可以从本地化中 受益的快捷方式:Command键加反斜杠 虽然这在美式英语键盘上 可以正常使用 但在日语键盘上实际上是不可能的 因为日语键盘根本没有反斜杠键 从macOS Monterey开始 系统会自动重新映射快捷方式 提供一个可以自然键入的 等效快捷方式 另一种常见情况是 具有方向意义的键盘快捷键 例如 Safari浏览器 使用Command键加方括号 在历史记录中向前和向后移动 在从右到左的语言中 使用左括号向后移动不是很直观 因此AppKit现在 在以从右到左的语言执行时 会自动将它交换到右括号 此行为适用于方括号、大括号 圆括号和方向键 在某些情况下 你可能希望禁用此镜像行为 例如 如果你的选单项 具有绝对方向性 例如左对齐 即使在从右到左的语言中 你也希望使用左括号 我们已经为类似的情况 提供了退出选项 你可以使用NSMenuItem上的 一些新属性 来控制这种行为 allowAutomaticKey EquivalentMirroring 允许你控制方括号等 方向键的镜像行为 allowsAutomaticKey EquivalentLocalization 控制所有本地化功能 包括键盘映射和镜像 如果你已经仔细地本地化了 键盘快捷键 或者你的app具有 键盘快捷键绑定的高度自定义实现 那么你可能需要在整个app中 禁用此功能 为此 你可以实现这个app委托方法 applicationShouldAutomatically LocalizeKeyEquivalents 并返回false 大多数app不需要使用这个 每个选单项API都强烈支持 选择特定项 而大多数app根本不需要选择 接下来是对符号图像的重大改进 我们将SF Symbols带到了 Big Sur中的macOS 为所有Mac app提供了 大量精美、排版平衡的符号图像 在macOS Monterey中 我们构建了新一代的符号API 和工具 我们称之为SF Symbols 3 这是一个巨大的更新 跨越了符号图像工作流程的各个方面 并且都可用于你的AppKit app SF Symbols 3扩展了SF Symbols app的功能 用于预览、导出 和导入符号图像 它还提供一个用于注释 自定义符号的更新格式 允许你在 符号图像中选择不同的层 并且我们在AppKit、UIKit 和SwiftUI中 扩展了我们的API 允许你为符号的每一层单独着色 在Big Sur中 我们为符号提供了两种不同的 渲染模式 首先是传统的模板样式 使用单一色调或效果 进行绘制 第二个是多色 它绘制的图像更像全色图像 使用符号图像本身定义的颜色 绘制每个路径元素 在SF Symbols 3中 我们添加了两种新的渲染模式 它们利用了新的符号图像格式 提供的图层信息 第一种是分层的 使用单一颜色绘制 同时强调符号的特定部分 而淡化其他部分 第二个 调色板 允许你为符号的每一层 分配你想要的任何颜色 你可以在 NSImage.SymbolConfiguration上 使用新的API来访问这些渲染模式 我将NSColor参数表示为圆点 以显示它们与渲染符号的对应关系 分层渲染模式采用单一颜色 应用于符号图层 降低不透明度 调色板模式接受逐字 应用于图层的颜色数组 你还可以创建偏好于 多色渲染模式的配置
我们还添加了一个新API 允许你 从一个基本符号映射到它的变体之一 例如 你可以将心形符号映射到 它的填充变体 或者像圆圈这样的内记变体 甚至是带有斜线的变体 这对于希望 特定上下文的特定符号样式的情况 非常有用 例如 你可能有一个选择器控件 你喜欢为未选择的状态设置轮廓 但你的选择采用填充样式 通常 此控件需要 两个不同的图像属性来指定 图像的选定和未选定版本 但是使用变体API 它可以只接受 单个基本符号并自动导出填充状态 该控件可以调用图片(with:.fill) 来选择处于选择状态的填充符号 每当有填充变体可用 它就会自动选择符号的正确版本 每种类型的符号变体都有常量 你可以将它们组合起来 以请求多个变体 例如圆形和填充 这只是对SF Symbols 3功能的 简要介绍 有一个新的视频集合 你可以在其中 获得有关整个符号工作流程中 所有新内容的完整详细信息 请务必将它们添加到你的待看列表中 macOS Monterey 还以TextKit 2的形式 对文本系统进行了重大更新 TextKit是适用于所有Apple设备的 文本排版和渲染引擎 它是一款出色的文本引擎 拥有可靠的记录 TextKit是一个线性文本排版引擎 这代表它从头到尾 排版一段文本 随着我们的平台和技术的发展 我们发现了很多非线性文本布局 会更好地为我们服务 所以 我们回归基础 创建了一个新版本的TextKit 那就是TextKit 2 我们为TextKit 2 设定了几个关键目标 一如既往 我们希望为每个脚本和排版的 国际文本提供最好的体验 我们还想让文本 与其他类型的内容更容易混合 最后 TextKit 2被设计为超快速 高效地塑造和呈现文本 无论是短标签 还是在大量文档中滚动 TextKit 2与TextKit 1共存 因此你可以为给定的文本视图 选择使用哪个引擎 现在我要让你知道一个秘密 你已经在Mac上执行了TextKit 2 因为从Big Sur开始 TextEdit将其用于纯文本文档 而AppKit文本字段将TextKit 2 用于大多数配置 所以说你一直都在一窥究竟 TextKit 2的主要区别之一 是它始终使用非线性布局系统 这代表它可以在更细粒度的 级别上执行文本排版 进而避免不必要的工作 例如 如果我们有一个大文档 其中只有一部分文本是可见的 线性系统仍然需要排版 所有先前的文本 以显示该区域 相比之下 像TextKit 2这样的非线性系统 可以从最近的段落边界开始排版 对于大型文档 这是一个巨大的加速 新的排版引擎提供了一组 强大的自定义点 使扩展排版系统 和添加你自己的行为变得简单 非线性排版系统也非常适合 将非文本元素混合到文本排版中 它在完成所有这些工作的同时 甚至提高了最大文档的性能 要了解更多信息 请查看《认识TextKit 2》 其中详细介绍了新API的设计 及如何使用的方法 接下来 我想分享一些 关于Swift中AppKit的更新 从并行性开始 Swift 5.5引入了一些重要的 语言级特性来管理并行性 第一个 async/await 允许异步方法调用 其行为很像协程 第二种 actor类型 通过隔离对单个执行线程的访问 来保护可变状态免受数据竞争的影响 AppKit适用于这两个新功能 对于async/await AppKit中的许多异步方法 也就是说 将延续作为 完成处理程序块的方法 已在SDK中进行了转换 以提供异步变体 一个简单的例子是 NSColorSampler 它允许使用者从屏幕上的任何地方 选择一种颜色 此调用是异步的 因为它等待使用者 选择他们喜欢的颜色 然后在完成后执行完成处理程序 使用async/await 你可以将其表示为异步函数调用 它在等待异步工作完成时 产生它的执行线程 然后从它停止的地方重新选择 你甚至可以在保护语句中执行此操作 现在 延续 接下来要完成的工作 不再嵌套在完成处理程序块中 相反 代码按顺序自然地读取 Actor通过将状态 隔离到单个执行线程 来保护状态免受并行性访问 如果这听起来很熟悉 那是因为AppKit的大部分状态 如视图层次结构和响应者链 也应该从单个执行线程访问 特别是主线程 这个限制非常适合actor模型 所以我们引入了MainActor的概念 它是一种必须从主线程访问的类型 在AppKit中 我们指定NSResponder 包括其子类NSView ViewController WindowController 和Application 以及NSCell、Alert、Document 和DocumentController 作为MainActor 在MainActor中执行的代码 可以自由调用 其他MainActor类型上的方法 因为你知道你已经在主线程上 但是 不在MainActor中执行的代码 必须在MainActor的上下文中 使用新的async/await功能 执行该UI工作 通过在编译器级别强制执行这个功能 Swift可以帮助你 在将并行性与UI代码混合时 避免常见的错误来源 Swift并行性视频深入介绍了 这一强大的新语言功能 你不会想错过的 Swift 5.5中的另一个新功能 是AttributedString的 值类型版本 除了提供值语义之外 它还具有类型安全属性和用于枚举 和操作属性范围的 出色Swift人体工程学 当你在AppKit中使用 AttributedString时 你会自动访问与我们的 文本绘制系统相关的属性 诸如前景色、段落样式等 你可以在 structAttributedString 和引用类型的NSAttributedString 之间进行转换 因此你可以与使用 NSAttributedString的API 进行互相操作 《Foundation中的新功能》 视频更详细地介绍了 AttributedString的设计 以及使用方法 我们最后的Swift增强与驱动更新 NSViews有关 它使用Swift的属性包装功能 来显著减少视图属性中 常见的样板文件 我们来看个例子 这是一个自定义视图 可通过一些属性进行配置 虽然看起来不错 但实际情况是 我们视图的属性声明 更有可能包含大量didSet 和额外的副作用 因为它太常见了 你需要在发生变化时 重新绘制、排版 或更新约束 这是很多的样板文件 所以我们通过为这种情况 创建一个新的Swift属性包装器 来改善这个场景 这叫”作废(Invalidating)” 它嵌套在NSView下 允许你指定 视图的一个或多个方面以在包装的 属性更改时失效 所有didSet和括号都消失了 使得关注属性本身的定义更加容易 本身的定义
AppKit提供了几种 内置的失效情况: 显示、排版、约束、内在内容大小 和可恢复状态 由于这些失效仅对视图有意义 因此我们限制了属性包装器 使其仅适用于NSView的子类 我们还要求该值符合Equatable 我们使用这种一致性 来检查值中有意义的更改 然后再执行可能代价高昂的重绘 或排版传递 如果你想做一些自定义的事情 你甚至可以定义你自己的失效 通过符合 NSViewInvalidating协议的类型 最后 快捷键 在macOS Monterey中 我们很高兴把快捷键的全部功能 带到Mac上 其中包括将快捷键 与你的AppKit app集成在一起 好消息是 如果你的app支持服务 那么它已经支持快捷方式 快捷方式出现在你今天 可以访问服务的 所有地方 如果你不熟悉此功能 那么你很容易接受它 AppKit通过检查响应器链 来决定哪些快捷方式适合上下文 它询问每个响应器 是否可以提供或接收 每个快捷方式所期望的数据类型 我们使用剪贴板类型来表达这一点 在大多数情况下 它对应于统一类型标识符 你所要做的就是为sendType 和returnType方法 实现validRequestor 如果你可以接受或提供指定的类型 则返回一个符合 NSServicesMenuRequestor 协议的对象 在大多数情况下 你只需直接实现该协议 然后返回self 调用快捷方式后 你将收到从快捷方式 用于其输入和输出的特殊粘贴板 写入和/或读取数据的调用 就这样 将你的app与快捷键集成 就是这么简单 我们还将Siri Intent 引入了macOS 你现在可以通过在Xcode中 创建Intents扩展来处理Intent 或者 如果你需要 从你的主app中处理它们 你可以从你的app委托 返回一个Intent处理程序 在你的app委托中 实现 application handlerFor intent: 方法 为你可以处理的任何Intent 返回一个处理程序对象 每种类型的意图 都有自己的处理程序协议 返回的对象必须遵守 因此请查看Intents框架文档 以获取有关实现 处理程序对象的更多详细信息 现在你已经掌握了所有的新信息 接下来要做什么? 首先 考虑控制着色 和SF Symbols 3等功能 如何帮助你改善app的设计 接下来 如果你的app使用TextKit 来创建自定义文本体验 请观看《认识TextKit 2》视频 并试用新API 你会爱上TextKit 2是多么容易 表达自定义排版和丰富内容 app管理并行性的方式是其架构的 关键部分 而Swift的新并行性特性 将在这方面有巨大的改进 现在是时候开始计划 async/await等功能 如何影响你的app管理 并行性工作负载的方式了 最后 通过采用AppKit的自动化功能 让你的app为快捷方式做好准备 感谢你的时间和关注 我们希望你喜欢 macOS Monterey中的 所有重要的改善 ♪
-
-
4:18 - Determining a button's background style
class NSButtonCell { /* Use to adjust your drawing for the underlying state of the bezel Returns .normal for colorless states Returns .emphasized for colorful/emphasis states */ var interiorBackgroundStyle: NSBackgroundStyle }
-
14:40 - Pick a color
@IBAction func pickColor(_ sender: Any?) { Task { guard let color = await NSColorSampler().sample() else { return } textField.textColor = color } }
-
-
正在查找特定内容?在上方输入一个主题,就能直接跳转到相应的精彩内容。
提交你查询的内容时出现错误。请检查互联网连接,然后再试一次。