Highlight
iOS 14 为 PencilKit 增加智能选择、插入空间、系统颜色选择器、全局手指绘图策略、独立
PKToolPicker实例和PKDrawingstroke 访问入口,开发者可以用drawingPolicy与 tool picker 状态控制 Apple Pencil 和手指输入。
核心内容
PencilKit 在 iOS 13 已经把低延迟绘图、Apple Pencil 压感和系统工具栏交给了 PKCanvasView。问题出在输入策略上:同一个画布里,手指有时应该绘图,有时应该滚动、选择或调整手写内容。开发者如果只靠旧的 allowsFingerDrawing,很难同时尊重用户的全局 Apple Pencil 偏好和 App 自己的模式切换。(04:03)
iOS 14 先把一批体验升级放进系统层。已经接入 PencilKit 的 App 会自动获得更像文字编辑的手写选择、插入空间、新的 UIKit 颜色选择器,以及更好的延迟表现;PKCanvasView 也开始支持 Mac Catalyst,不过 Catalyst 上没有 tool picker,需要通过 canvas API 设置 ink。(01:21)
开发者真正要迁移的,是输入策略和工具栏状态。PKCanvasViewDrawingPolicy 替代 allowsFingerDrawing,把“任何输入都画”“只允许 Pencil 画”“跟随默认策略”明确拆开。PKToolPicker 也从共享窗口实例走向独立实例,便于一个 App 同时拥有记笔记画布和涂色画布。(05:21)
这场 session 最后把边界推到 PKDrawing 内部。iOS 14 让开发者能访问 strokes、inks、paths 和 points。10107 只点到这条路线,具体的读取、修改和构造绘图数据交给后续的 10148 继续展开。(09:08)
详细内容
PencilKit 的系统级体验会继续演进
(01:21)PencilKit 文档在 iOS 14 里获得了智能选择。用户可以双击选择一个词,再次双击选择一行,也可以用 grab handles 扩展选择范围。对于非连续内容,系统提供了 velocity-sensitive tap-and-pan 手势,用户可以像刷过笔画一样选择分散的 stroke。
(01:51)插入空间解决的是手写笔记的常见问题:写完以后发现中间漏了一段。用户可以点空白区域,从 callout bar 选择 Insert Space,再拖动 handle 留出位置。这些能力由系统提供,已有 PencilKit 客户端不需要写额外代码。
(02:23)PencilKit 还采用了新的 UIKit 系统颜色选择器。用户可以从 spectrum、sliders、custom colors 和 eye dropper 中选色。演讲明确把更多细节指向 10052 的 UIKit pickers session。
用 drawingPolicy 替代 allowsFingerDrawing
(05:21)allowsFingerDrawing 在 iOS 14 被新的 PKCanvasViewDrawingPolicy 取代。开发者不要直接改 drawing gesture recognizer 的 allowedTouchTypes,应该把输入意图写在 canvas 的 drawing policy 上。
var drawingPolicy: PKCanvasViewDrawingPolicy
关键点:
PKCanvasViewDrawingPolicy.anyInput允许手指和 Apple Pencil 都绘图。PKCanvasViewDrawingPolicy.pencilOnly只允许 Apple Pencil 绘图,手指可以滚动或触发智能选择手势。PKCanvasViewDrawingPolicy.default会在 tool picker 可见时尊重用户通过设置或 tool picker 切换的UIPencilInteraction.prefersPencilOnlyDrawing状态。- tool picker 隐藏时,默认策略只让 Apple Pencil 绘图,手指负责滚动和选择。
控制 tool picker 里的 Draw With Finger 开关
(07:06)如果 App 是纯 Pencil 绘图工具,画布设置成 pencilOnly 后,tool picker 里的 Draw With Finger 开关会造成误导。此时应该隐藏绘图策略控件。
PKToolPicker.showsDrawingPolicyControls
关键点:
- iPad 上这个控件默认会显示 Draw With Finger 开关。
- 当 canvas policy 固定为
pencilOnly时,把showsDrawingPolicyControls设为false,避免用户切换后画布行为没有变化。 - 如果 App 希望尊重用户的全局 Apple Pencil 设置,就保留这个控件,并让 canvas 使用
.default。
每个 canvas 可以维护自己的 PKToolPicker
(08:40)iOS 14 更新了 PKToolPicker 的初始化方式。开发者可以创建多个独立 tool picker,每个实例都有自己的 drawing policy controls、selected tool 和其他状态。演讲用记笔记模式和涂色模式说明这个差异。
notesCanvas.drawingPolicy = .default
notesToolPicker.showsDrawingPolicyControls = true
notesToolPicker.selectedTool = PKInkingTool(.pen, color: .black, width: 2)
drawingCanvas.drawingPolicy = .anyInput
drawingToolPicker.showsDrawingPolicyControls = false
drawingToolPicker.selectedTool = PKInkingTool(.marker, color: .purple, width: 20)
关键点:
- 记笔记 canvas 使用
.default,让用户通过系统偏好决定手指是否绘图。 - 记笔记 tool picker 显示 drawing policy controls,用户能直接看到并切换 Draw With Finger。
- 涂色 canvas 使用
.anyInput,因为这个模式明确允许手指和 Apple Pencil 都上色。 - 涂色 tool picker 隐藏 drawing policy controls,避免出现与固定策略冲突的开关。
- App 必须自己持有每个
PKToolPicker实例,否则 picker 的状态和生命周期无法稳定维护。
Stroke 访问把 PencilKit 从画布推进到数据层
(09:08)最后一个变化是 PKDrawing 内部数据开始开放。开发者可以访问 strokes,并进一步看到 ink、path、points 等信息。10107 没有展开完整代码,它把识别、动画、机器学习和绘图修改这些场景指向 10148。
这个边界很重要。以前采用 PencilKit 主要是在 App 里放一块高质量画布;iOS 14 之后,绘图数据可以进入 App 自己的业务逻辑,例如批注识别、笔画动画、形状修正和基于机器学习的手写内容分析。
核心启发
- 做一个笔记与涂色并存的创作界面:同一个文档里放
notesCanvas和drawingCanvas,前者使用.default并显示 Draw With Finger,后者使用.anyInput并固定紫色 marker。这样用户在记笔记时保留滚动和选择,在涂色时可以用手指直接上色。 - 做一个尊重系统 Apple Pencil 偏好的批注工具:让主批注 canvas 使用
.default,保留 tool picker 的 drawing policy controls。用户在系统设置或任意 PencilKit App 里切换 Prefer Only Pencil Drawing 后,你的 App 会跟随同一个偏好。 - 做一个面向纯 Pencil 的专业绘图模式:把画布设为
pencilOnly,同时关闭showsDrawingPolicyControls。手指用于滚动、选择和调整内容,Apple Pencil 负责产生笔画,适合草图、工程批注和长文档手写。 - 为 Catalyst 版本保留基础绘图能力:在 Mac Catalyst 上使用
PKCanvasView展示或编辑 PencilKit 内容,通过 canvas API 设置 ink。由于 tool picker 不支持 Catalyst,界面上要提供自己的工具选择入口。 - 把 stroke 数据交给识别或动画流程:把 10107 当作入口,继续阅读 10148 的
PKStroke、ink、path 和 point 细节。适合做笔画回放、图形识别、批注分类或手写内容分析。
关联 Session
- Meet Scribble for iPad — 讲解 Apple Pencil 手写输入如何进入标准文本控件,以及自定义文本体验何时需要
UIScribbleInteraction。 - Inspect, modify, and construct PencilKit drawings — 深入
PKDrawing的 strokes、inks、paths 和 points,是理解本场 stroke 访问入口的下一步。 - Build with iOS pickers, menus and actions — 介绍 UIKit 的系统颜色选择器等控件,补足本场提到的新 PencilKit color picker 背景。
评论
GitHub Issues · utterances