大多数浏览器和
Developer App 均支持流媒体播放。
-
Core Bluetooth 新功能
了解如何采用 Core Bluetooth 中的隐私增强变更。探索与 LE 2Mbps、广告扩展、BR/EDR 和双模式设备相关的新可能性。学习如何利用 PacketLogger 的功能改进来调试 Core Bluetooth 通信。
资源
相关视频
WWDC19
-
下载
(MAC OS的 APPKIT新功能)
大家下午好
我是Chris Dreessen 我从事的工作是Cocoa框架 今天我们来谈谈 今年AppKit的新功能
我们开始吧 我们有很多功能 我们对NSColor 进行了一些补充 对NSScreen也进行了补充 我们还有一整套 帮助您处理文字和字体的功能 我们在此次演讲都会略微提到 我们也会讲到工具栏和触控栏 还有边栏 (色彩 显示屏 文本 工具栏 控件 活动 几何 格式化 扩展) 我们也会讲到 AppKit macOS 10.15 的一些新控制功能 我们会通过NSEvent的介绍 来结束今天AppKit的讲解
我们稍微跳一下 讲解一些基础功能 包括一些几何增强功能 和新格式化程序 这些功能能够使本地化更加简单 最后再对macOS 10.15的 系统扩展注释进行总结
(新框架) 在我们开始之前 我们先来讲讲重头戏 在macOS 10.15 AppKit并不是 系统唯一的UI框架 我们还有其他两个UI框架
你们可能听说过其中一个 那就是UIKit
在macOS 10.15中 你可以重新编译你的app 并在Mac上运行iPad app 如果你的AppKit app 运行良好 那你对这个可能就不那么感兴趣 但如果你的iPad app 从来都没有在Mac上运行过 或者过去你在这个 iPad app上花了很多心血 但没有怎么研究过Mac 那就很有用了 你可以仍旧用AppKit为你的 UIKit app进行润色 比如工具栏和触控栏支持
我们认为会很有用 另一个新的框架 我们都非常激动 就是SwiftUI SwiftUI用简洁的方式 来描述你的用户界面 和它们之间的过渡 也是将它们整合到数据模型的方法
我认为这是制作UI的好方法 它是原装Swift 并支持各种Swift语言功能 我们很喜欢这一点 再次强调 这要与AppKit 一起使用 你要把它嵌入视图层次结构中 到处都要 一整个星期都有关于 这些框架的演讲 你们都可以参加 (色彩) 回到AppKit 在macOS 10.15中 我们在NSColor中 加入了一些新的系统颜色 有青色和靛蓝
这些是系统颜色 也就说明它们是动态的 根据你使用的外观 它们也会进行相应的变化
我觉得这都是很好看的颜色 在你的app中都可以用到
NSColor也有根本性的变化 我们稍后会讲到 在NSColor中 我们用的是 tagged pointer系统 NSNumber和 NSString用的也是这个 什么是 tagged pointer呢 一般来说 在NSColor 我们将各种组件值或其他信息 作为iBar存储在已配置的对象中 而在tagged pointer 我们将该信息压缩到较小的位数 并将它们储存在pointer中 所以不需要单独配置 如果你的代码大量配置 或解除配置NSColors 你就能够注意到这一点 我们对此也很兴奋
一般情况下这种变化是不可见的 但我想强调一点
如果你要访问颜色的派生属性 例如CGColor
而这是未标记的版本 它可以在色彩中缓存为iBar 而CGColor也可以和 NSColor一样
在显示屏上的这段代码 我们可以看到 我们将CGColor传递至 以色彩填充context设置调用 这在以前是没有问题的 但在tagged pointer 在自动释放池外使用 还是有一定危险的 所以最好还是不这样用 有些事情我们还是要注意 以防万一
很多人都会使用面板取色 还有我们心爱的吸管工具 在面板取色中 点击后会出现这样的放大镜 再在显示屏上拾取特定颜色 以读取其RGB值
在macOS 10.15中 我们也会向你展示这项功能 我们有一项新类 叫NSColorSampler NSColorSampler 其实很简单 它有一个单类方法叫Show 你可以向Show传递一个色块 而如果用户取消了选项 它就会返回所选颜色或是零
我们也很高兴向你们介绍我们的实施 如果你有自己的实施 那么在macOS 10.15中 你需要注意几点 在显示屏录制的时候 会弹出用户权限许可
如果你用的是 NSColorSampler就不会
接下来是另一个 很好用的NSColor API 我们叫它动态色彩提供程序 它其实只是NSColor 一项新的初始化程序 它包括两项内容 第一是色块 且该色块可访问 NSAppearance
如果我们要用到色彩 要不然就是我们要在 位图的上下文中进行绘制 要不然就是要写进文件 或是用作背景颜色 我们将该色块命名为 适合当时外观的名字 在显示屏上 我们使用的是NSAppearance 的最佳匹配方法 来告诉我们 我们要求的外观 是浅绿色更好还是深一点的绿色更好 我们为每种情况也准备了硬编码颜色
这在你要做出一些 编程决策的时候就很有用 对你在NSColor中 使用动态色彩也十分有用 这比在更改外观时对视图层次结构 硬编码文字颜色进行更改要简单得多
我刚刚也说到了该程序包含两项内容 另一项就是名称 而在编码时 名称也是非常重要的 如果你想通过 NSConnection发送颜色 也就是 NSXPCConnection 当你要解码的时候 你就要按名称查找 所以在连接的两段 都要给该颜色颜色命名 这很重要
这些色彩都很棒 NSColor也很棒 他们在好显示屏上看起来就更棒了 (显示屏) 现在我们来讲讲 NSScreen的改进
如果你以前要实现显示屏选择器控件 你就要一串面对用户的字符串 来识别NSScreen 如果你使用的是NSObject的 继承描述方法 那么你的用户可能就会对 NSScreen 0x60000261e460 不满意
而在macOS 10.15中 NSScreen.localizedName 会给显示屏一个更好更可读的描述
好了 我们再来谈谈显示屏 在过去多年间 显示屏变得越来越亮 也没有什么人 会把他们的显示屏调到最亮
如果我们放一张图片 我们可以把黑色想象成0分量值 白色是1 如果我们把显示屏调暗 我们就有点像压缩了 这些值的绝对含义 软件中每单位值发出的光子更少了
但是显示器依旧可以显示鲜艳的色彩 我们可以允许扩展动态范围内容显示 而该内容并不止是限制在 0到1的范围内 这样我们依旧可以使用 显示器的最大亮度 这样对于一些图片 它们的色彩相对于 其他白色部分来说会更亮
这其实不是什么新功能 在Mac的许多版本中就有这一功能 从macOS 10.11开始 都可以 有两个API可以帮助你做到这一点
其中一个 是NSScreen 最大扩展动态范围颜色分量值
它实际上很有用 它不仅是你见过的最长 Objective-C属性名称
而且它能在你的系统 处于扩展动态范围模式时 它会告诉你剪裁前 你可以使用的组件最大值 比如说1.3
如果系统不在该模式下 它就会返回1.0 所以我们将该模式应用于系统 使用不同的API 也就是CAMetalLayer 需要扩展 动态范围内容 这也是NSOpenGLView 中的一个API 叫需要动态范围 打开GL曲面 当你把其中一项设为真 你就能通过此API 获得额外动态余量
所以我们对macOS 10.15 进行的添加 是一项更长的 NObjective-C属性名称
但重要的部分其实更短了 叫最大潜力 它会告诉你动态余量 告诉你最大值 即使系统未处于扩展动态范围模式 这很有用 如果你在处理扩展动态范围内容 你可能会有多条 发送图像数据的通道 比如用于扩展内容的浮点通道 就要比BJRA通道更贵 所以提前知道你有足够的 动态余量可供操作 可以为你的支持提供条件
我还想谈谈另一个API 具体来说是用于 昨天我们看到的新Apple显示器 这台新的显示器很了不起 因为它真的很亮 它可以一直保持1000尼特 因此 我们可以将它看做参考质量 对于特定的组件值可以这样认为 该像素有一个绝对亮度
它很亮 但也不是无限亮 如果你继续生成足够量的像素值 它实际上是无法表示的 我们刚刚所说的参考质量 就会有所下降 我们必须缩小图像内容 以适应可用的亮度范围 这也是NSScreen 最大参考会告诉你的 如果超过该值 就无法再使用绝对尼特了 (扩展动态范围)
好 我刚刚提到了 CAMetalLayer 这也是获取扩展动态内容的方式之一 我要强调几点 现在如果你要在Mac上 使用MetalLayer 你要做的事情 你要注意 你的CAMetalLayer要在 哪个屏幕和 哪个Metal设备上显示
这有点费解 你要先获取窗口和窗口显示屏 还有显示屏的设备描述 你还要请求你在文件中 找到的硬编码字符串 但我们不从标题中导出
最后 你还要传递 CDDirectDisplay 来确定使用的设备 这些功夫是值得的 因为它可以让你避免 通过系统总线在GPU之间移动数据
我们在macOS 10.15中 做了提升 CAMetalLayer 和MetalView 有一个新的首选设备属性 可以解答这个问题
它精简了你的代码 我们很高兴你今年就能使用这项功能
这也就涵盖了 关于屏幕我们想说的东西 (文本) 现在我们来介绍各种各样的文本功能 首先 我想说的是 NSTextView对较暗外观 会使用自适应颜色 你可以在文本编辑中 打开或关闭该功能 这里浅色和深色都有快照 都是系统蜡笔选择器中的颜色 你可以看到 当此功能激活时 黑色和白色都几乎颠倒过来了 同时更为饱和鲜艳的颜色 还是同样的颜色 但是亮度不同了 这使它们能够更好地与背景外观匹配
所以这在你制作文本内容 而想要它们的颜色 和背景外观更匹配时十分有用 这对富文本文件尤其有用 比如让它们的颜色更适合页面 比单纯让它们在打印页面上 显示固定颜色要重要得多
一般来说这是我们想要的 但如果你有一款app 是用于创作富文本内容的 你可能就要关闭该功能 或是让用户能选择关闭该功能 这样他们就能自己决定 是否需要匹配打印内容的表达 而不是屏幕显示
在场的各位应该都很熟悉 NSSpellChecker 如果你作为开发者不熟悉的话 作为用户也肯定熟悉 在macOS 10.15中 很高兴地宣布 NSSpellChecker后继有人了 后继者就是 NSTextCheckingController
NSSpellChecker 在文本视图中工作 而NSTextCheckingController 适用于多种系统 可在UIKit WebKit 或是AppKit中使用 你也可以通过使用 NSTextCheckingClient协议 来自己使用它
除了检查拼写 它还有其他功能 还可以检查语法 它可以进行数据检测 以查找URL或是电话号码和日期 你可以控制它们 可以设置是让错误拼写高亮显示 还是自动纠正 所以我认为这是一项 非常灵活的API 如果你要进行大量文本输入 那么这绝对值得一试
我们对文本还进行了一些小小的添加 几乎所有与NSText相关的类 现在都支持安全编码 所以如果你想将这些作为 NSXPC连接 词汇表的一部分
它们也能良好运行 (安全编码支持) (NSFONTDESCRIPTOR 系统设计) 大家可能很熟悉NSFont 有些朋友可能对 NSFontDescriptor也比较熟悉
NSFontDescriptor 是简洁的一个类 它允许我们使用它们的 一些语义属性来查找和转换字体 我在这里做了一些样本
顶行是我在Interface Builder 中的硬编码字体 但是下面几行 我用的是NSFontDescriptor 系统设计API 是macOS 10.15中的 新功能 如果我说 我想让字体更圆一点 或是serif字体 或是等宽字体
我们会有另一场演讲 会进行更加详细的介绍 但我认为这是让你的app 更具风格的方式
如果你有一款编写 富文本文件的跨平台app 在Mac OS和iOS上同时运行 或者是一款不跨平台 只从其他平台 读取文件的app 你可能会遇到这样的问题 即使文档指定的是相同的字体大小 但是看起来还是十分不同 这是因为iOS设备和Mac设备 屏幕密度十分不同
在macOS 10.15 我们有新属性字符串API 你可以在读取和写入富文本文件中的 属性字符串时使用 您可以告诉我们源和 目标操作系统是什么 我们会自动调整字体大小 让它们视觉上看起来一样 在这种情况下 我们把160点调到了120点 这样它们视觉上看起来就是一样的了
(NSLAYOUTmanAGER 默认断字) 最后一点关于文字的功能 我想谈谈 对NSLayoutManager 进行的添加 叫做使用默认断字 过去 NSText类可以 通过NSParagraphStyle 帮你断字 以此来控制断字 LayoutManager 更易使用 它默认是关闭的 也就是说不需要断字 像左边这样 你若设置 我们将为断字选择一个默认值 而右边 我们将encyclopedia internationalization 两个词断开了
所以 该文本API 可以润色你文本系统的 角落和边缘
(工具栏) NSToolbar也有一些新功能
首先 是NSToolbarItem的 新属性 叫isBordered
过去 如果你想在NSToolbar中 获取这种按钮式的外观 你必须要配置自己的 NSButton实例 自己设置 然后将其用作工具栏项目的 自定义视图 这可以实现 但是花费太多精力了 而且你也不能使用 NSToolbarItem 对自动启用和禁用提供内置支持
但如果你将其用作边界属性 那你就可以自由使用了
还有 NSToolbarItem 有一个新的标题属性 可以将工具栏项目配置为 字符串按钮 而不是图标按钮 这与标签属性也有所不同 如果我们已将工具栏配置为显示标签 它会在按钮下方出现
这并不是macOS 10.15功能 关于NSToolbar的全部类
我们还在NSToolbarItemGroup中 添加了许多功能 让它们更多功能和更实用 首先 就是一些方便的构造函数 它们可以让你 同更少的代码创建出一样好的UI
而NSToolbarItemGroup 同时也变得更为灵活 看看屏幕右方的图片 你可以看到 它的支持项目 表示为分段控件 也能通过下拉菜单和 弹出菜单等方式代表它们 所以它是一个多功能的工具栏控件 因为它将其他工具栏项目用作词汇 我们还可以自动创建折叠表示 当窗口有太多工具栏时可以用到 (NSTOOLBARITEMGROUP 方便的构造函数) (分段控件 折叠表示)
在新NSMenuToolbarItem类中 也有一个非常相似的效果 这很像 ToolbarItemGroup的 菜单项表示
但将NSMenu 用作了currency 这很棒 因为你可以使用NSMenu功能 比如子菜单或分隔符项 甚至可以对菜单项使用自定义视图 所以这是一项很强大的工具 如果你想让工具栏有一些更复杂 更厉害的表现的话
NSTouchBar在 macOS 10.15中同样也有提升 我想说的第一点 是NSTouchBar 本身的新类属性 那就是自动自定义TouchBar 菜单项已启用 这听起来可能很熟悉 在NSApplication 中有一模一样的属性 如果你在代码中 想以不引用NSApplication的 方式对其进行分解 那么你就可以使用触控栏的这一功能 一个例子是 如果你在写UIKit app 也并不会有 NSApplication实例
一个更重要的控件 是新的 NSStepperTouchBarItem类 就像屏幕上的步进器 这对于日期和数字等的 离散输入非常有用 但考虑到触控栏布局较大 且分布水平 你可以在新app中使用这项功能 比如在绘图app中直观地选择工具 我们对于这项 TouchBarItem新类也十分激动 我认为你们可以在app中好好利用
NSSlider触控栏项目 也有一些小提升
你可能用过 NSSliderTouchBarItem 你可能会觉得太小
那么可以通过TouchBarItem实例 中的滑块来解决这个问题 再为其添加自动布局约束 在macOS 10.15中 你可以直接在项目上 设置最小滑块宽度 接下来的事情我们会帮你解决 同样的 如果你想放大滑块 你可以通过 最大滑块宽度属性来达到目的
最后我想说说边栏软件度量 在macOS 10.15 你可以切换补充工具栏的大小 可以通过设置或者 系统偏好设置中的常规窗口切换
默认是中 你也可以设为小或大
我把它调出来是因为 如果你不知道这个功能 你可能就没有办法查看 这些或大或小规格的原图 所以如果你使用的是位图 那么继续使用 再为其添加表述 或者使用独立分辨率版本 同样的 macOS 10.15中 也有一项新功能 也可以自动选择明或者暗的外观 这也可以在常规pref窗格中找到
好了 我们介绍了 工具栏和触控栏的控件 让我们来谈谈广泛适用的控件 (控件) 首先 我们非常开心 向大家介绍NSSwitch NSSwitch是 NSControl的完整子类 它支持绑定 支持格式化
但它与现有的复选框功能一起存在 所以你可能有这样一个问题 我什么时候该用NSSwitch 什么时候又用复选框呢 如果你已经在用复选框 你就继续用 它通常都是正确的控件
我们认为NSSwitch 在你进行很多切换时更好用 比如你要关闭和开启很多功能时 在这个例子中 左边是主切换 它可以启用右边 所有的共享服务 (NSSWITCH 可以在进行大量切换时使用) (不要在小型活动中使用NSSWITCH 特别是列表) (收集视图组成布局) 在macOS 10.15 我们在NSCollectionView 花了很多功夫 我们要说的一点 是构图布局 在此 你不需要再通过添加 NSCollectionViewLayout子类 来修改它 你还可以使用很多有趣的功能 比如容量相关尺寸 布局中断和部分 以及可嵌套组合 并使各个部分可以滚动 当然 所有都适用于从左到右 和从右到左的语言
还有一项新 CollectionView功能 称为可扩展数据源
这些是基于标识符的数据源 让我们能跟踪添加或删除项目等内容 或者是项目在两个地点间的移动 它可以自动推断出要使用的模块 也就是说你不用再用 performBatchUpdates 或是reloadData了
(使用IB Storyboard的 IBSEGUEACTION) 好了 从app控件 回到IB功能 IB是一个很好的方法 来连接app中的各种视图控制器
曾经 视图控制器会通过编码器进行初始化 你就需要不同的方法 将不同的信息输入视图控制器
这没有那么难 但同时也意味着你的代码 可能比你想象的要多 看看我的代码 你可以看到一项叫 showPetDetails的功能
它会返回一个新的视图控制器 从IB传递编码器 还对选定的pet名 插入了我们自己的概念
所以这是将单独的初始化 集合起来的好方法 和配置步骤 还有一件事 这个函数附带了 BSegueAction注释 因此 我们可以为Segueway转到 连接检查器和界面构建器 并将其直接连接
所以我们认为这对于在视图控制器 和Storyboard中 添加额外配置非常有用
对于所有AppKit控件而言 一项很棒的功能就是 它们支持自动布局 它们知道如何处理内容 并将其输入自动布局引擎
也就是说你可以做一些例如 改变文本字段和按钮字符串的事 并且自动布局将自动 重排视图层次结构和窗口 让它们更好看
但有时候 它们是UI 是一些不太重要的部分 所以在这个网格视图中 网格决定了其他东西的大小 内部标签的大小其实不重要
但通常 AppKit还是会 测量这些控件 并将它们输入自动布局引擎 虽然这并不会影响最终效果
在macOS 10.15中 你可以把它关掉 NSView有两项新属性 来关闭对垂直轴 和水平轴的测量行为 我认为这是减少UI内行为的好方法 因为你知道内部控件的大小影响不大
关于控件我还想讲一点 比NSControl更宽泛一点 就是NSResponder 及其模块捕获有关行为 来看屏幕上的代码 你可以看到两部分 一个是外面的部分 这将在后台线程上执行 还有是里面的部分 将在主线程上执行 这是一种相当普遍的模式 我们在后台开展工作 然后继续将该工作的结果 分配给主线程上的UI
但是这段代码是在 macOS 10.14上运行的 可能会导致崩溃 保留文本字段的唯一方式 是这些模块 而这些模块的破坏顺序又没有被定义 如果外部块最后解除分配 则文本字段将在后台线程上解除分配
文本字段作为应答器 是应答器链的一部分 它可以是视图层次结构 或键视图循环的一部分 所有数据结构都是如此 从后台做修改是不安全的 因为这是dealloc要做的
在macOS 10.15中 这不是问题 NSResponder会自动将 dealloc方法及其结果 移动到主线程 所以在模块中做捕捉就很安全了 而不用担心这些模块在哪里会被释放 所以我认为这在你的app中 可以去除许多复杂的事故 因为这些后台上的崩溃 在几秒甚至几分钟后才会显现出来
我还想谈谈打开和保存面板 (面板和工作区) 我们在macOS 10.15中 做了很大改变 那就是打开和保存面板 现在是两个不同的过程 这在沙盒app中已经实施了 我们只是把它用于所有app而已
这应该不会有什么太大影响 你应该不会注意到 除了一些性能和安全性问题 但是 如果要对打开和 保存面板进行子类化 且依赖于特定的 视图层次结构配置的话 那你就会遇到问题了 我们希望能在实验室看到你们 讨论这些问题并解决这些问题 (面板) (新NSWORKSPACE方法) 我们在macOS 10.15中 也有NSWorkspace的新方法
这些方法可用于打开一或多个URL 或是app 这听起来很熟悉 你可能认为NSWorkspace 已经有了这样的方法 是的 但新方法是异步的 因此它们根本不会阻止主要威胁 当app完成启动或取消操作时 我们将以完成处理程序进行回调
除了异步之外 这些方法还可以高度控制 我们启动这些URL和app的方式
而该控制通过 新NSWorkspace.OpenConfiguration对象
这只是一个告诉你如何操作的例子 但你可以控制用户是否参与此过程 比如 如果你要请求服务器安装 或是不知道要用哪个app 用户就要选择一个app 这时你就可以压制这种行为 或取消打开程序 你也可以控制一项程序或是文件 是否要添加进最近访问菜单 有很多东西可以控制 哪些app可以在启动时隐藏 哪些app可以在启动时隐藏 所以 不管你的url 或app打开需要什么条件 NSWorkspace在 macOS 10.15都能很好适应
(活动)
我们来简单谈谈活动
这是我想要展示的功能 如果你将鼠标停在绿色按钮上 在窗口标题栏上 你就会得到新菜单 第一组选项 就是将窗口全屏显示 或将其放置在共享全屏空间中 这很实用 但还有一项更实用的功能 就是可以将窗口移至另一显示器
这对于经常将电脑 连到另一个扩展屏幕的人来说 我觉得尤其实用 但你不需要用传统意义上的显示器 有附加显示器功能的 iPad也可以
你们可以看到 这是一个叫Pencil Draw 的iPad程序 上面有美丽的草书 该app支持 Apple Pencil 所以iPad现在可以 作为Mac的平板设备
所以在macOS 10.15中 我们将拥有更多的平板电脑用户 如果你在过去几年中一直在想 为你的app增加平板支持 现在正是时候 现在我来告诉你怎么做 (平板活动回顾) 平板活动基本上是正常的鼠标活动
但它们也有不同 如果你注意到 NSEvent SubType 字段的话 这里有一个 tabletPoint值 如果你注意到来自平板的 tabletPoint活动 它同时还有附加的压力信息 注意到这些压力信息 对于做一些漂亮的草书是非常重要的 因为会有不同笔宽的地方
如果你过去在iOS中 使用Pencil API
通过注册处理程序 你可以做一些事情 对压力进行更新 但这在Mac中没有表现出来 你可以只关注 NSEvent的压力部分
有一个和Apple Pencil 有关的管理 我想提一提 就是如果你双击笔的侧面 它就会切换 比如画图app中的画图工具 我们叫它 changeModeEvent 此项活动中有一个 新的EventType论坛 也有新的响应器方法 通过响应器链进行直接处理
在许多情况下 你可能想要平板功能 但它并没有像View一样 锚定在响应器子类中 但你还是想直接处理该活动 有一个方法可以做到 就是使用现有的 LocalEventMonitor API
看看屏幕底端的代码
你可以看到 NSEvent.addLocalEventMonitor 用来使活动函数 抓取changeModeEvents 然后循环使用工具 最后回到活动 让它流经响应者链的其余部分 所以 这是分解代码的好方法
(几何) 好 我们来谈谈基础功能 我们有一些新的几何数据类型 通常进入基础功能 大家都很紧张 今年你可以选怎么个紧张法
数据类型是 NSDirectionalRectEdge NSDirectionalEdgeInsets 和NSRectAlignment 它不在像Min X或Max S 之类的currency里工作 也不是左右 而是用前导和尾后标识符 所以 他们会根据从左到右 或是从右到左的系统中 上下文自动翻转
NSCollectionView 正是出于此目的 你也可以在你的app种直接运用
(格式化) 我还想说说另一个基础功能 有助你进行本地化 那就是新格式化程序
首先是 NSRelativeDateFormatter
NSRelativeDateFormatter 有两个重要属性 dateTimeStyle 允许你选择是否以绝对单位 或是更口语化的术语工作 是一星期前或是上周 还有unitsStyle 控制了语言是冗长或是简洁
还有新的 NSListFormatter类 NSListFormatter 很有趣 它并不格式化 标量对象 而是格式化一个对象数组
而它对每一个对象 都使用一个单独的格式化程序 列表格式化程序添加的值 是了解在各个格式化字符串之间 在哪里添加逗号 以及是否需要牛津逗号 或是将二者结合
之后会有关于这方面更详细的演讲 我建议你也听听
关于基础功能 我们还有一项令人激动的新功能 叫Combine Combine 是Swift API 用于将app中对象的属性 连接到另一个属性 所以我这里展示了具体的例子 这是我们实施的 awakeFrontNib方法 继续并从模型对象绑定名称属性 至NSText字段值 不管该名称何时改变 该文本字段都会更新其字符串
所以这真的很强大 它app不仅仅是UI绑定 我们也有专门对此进行的演讲 也非常棒 所以这周也去看看
(扩展) 最后 我想说说macOS 系统扩展的一些改变
我们在系统扩展系列中 添加了一小部分 以非UI文件提供程序 操作扩展的形式进行 如果您熟悉基于UI的文件或行为 文件提供者动作扩展 都是一样的 但有时 你并不需要额外的UI 你可以不用 这也满足了这种需要 (新扩展类型) 还有一些我们觉得更有趣的事情 在过去 有一些功能 在OS层面上 你必须要用内核扩展来添加 我们现在让系统扩展 可以执行类似的操作 我们有新的网络扩展 有DriverKit来帮助编写 某些类型的设备驱动程序 我们还有新的端点安全系统 有助于编写杀毒软件 所以如果你这些年来 一直在编写内核扩展 那这些对你就非常有用 我们对此进行了安全提升 我们也感到十分兴奋 你不用再对内核模式调试 你应该也会很兴根
所以 这也就包含了我们的补充 (总结) 我想再次提醒你们今天说到的 很棒的东西 我们补充了NSColor 包括新的动态系统颜色 将自己的动态程序 嵌入NSColor系统的新方法 以及你可以自己使用的颜色取样器类 可以直接从屏幕上拾取颜色
我们也说到了NSScreen里的 许多API 包括那些让你充分利用 扩展动态范围的东西
我们说到了各种各样的文本增强功能
如果你想让你的app在较暗主题下 也很好看的话 或是呈现简单或富文本 黑暗模式增强功能都会很棒 文本检查控制器将让你 丰富自己的文本引擎 而且是以前所未有的方式 我们兼容iOS和macOS 关于文本大小的调整非常有用 尤其是考虑到今年 Mac上有了UIKit
我们也说到了像 NSSwitch这样的控件 还有CollectionView 你们一定要去听听 CollectionView演讲 因为CollectionView 已经成为UI词汇中 非常重要的一部分
我们也说到了NSToolbar 的一些提升 让您更轻松地制作按钮 还有使用ToolbarItem组 的更多方式
我们介绍了在NSEvent中 如何处理平板活动及对 Apple Pencil特殊支持 再次强调 现在有许多平板用户 在未来会转向使用Mac 我认为你的app可以使用平板功能 加上去会是很棒的功能
最后以对NS的一些本地化提升结束 或者说是对基础几何数据类型的提升 以及新的格式化程序
希望你们都能够喜欢 并运用这些新功能 祝你拥有美好的一周 非常感谢 (欲知更多信息 请登录 DEVELOPER.APPLE.COM/WWDC19/210)
-
-
正在查找特定内容?在上方输入一个主题,就能直接跳转到相应的精彩内容。
提交你查询的内容时出现错误。请检查互联网连接,然后再试一次。