用途:PencilKit 用于在 Apple 平台应用中实现手写、绘图与标注功能,捕获 Apple Pencil 和手指输入并渲染笔迹。无需额外权限或 Info.plist 配置,导入 PencilKit 即可使用。平台支持 iOS 13+、iPadOS 13+、Mac Catalyst 13.1+、visionOS 1.0+。
主要能力:PKCanvasView 是 UIScrollView 子类,负责捕获输入与渲染笔迹,可通过 drawingPolicy 控制输入方式(.default 为 Pencil 绘制、手指滚动;.anyInput 为两者均可绘制;.pencilOnly 为仅 Pencil 绘制)。可设置 contentSize 扩大可滚动绘图区、isRulerActive 启用标尺,并通过 tool 属性设置 PKInkingTool 或 PKEraserTool。PKToolPicker 提供浮动工具面板,支持自定义工具项,包含 pen、pencil、marker、monoline、fountainPen、watercolor、crayon 等笔迹类型。PKDrawing 是值类型,保存全部笔迹数据,可用 dataRepresentation() 序列化为 Data 持久化,用 PKDrawing(data:) 加载,并支持 append、appending、transformed 等操作。还可通过 drawing.image(from:scale:) 导出图像,遍历 strokes 检查笔迹、墨迹类型、颜色、渲染边界与控制点,或程序化构造 PKStroke。
使用方式:在 UIKit 中创建 PKCanvasView 并设置 delegate、drawingPolicy 与 tool;显示工具面板需调用 toolPicker.setVisible(true, forFirstResponder: canvasView) 并让 canvasView.becomeFirstResponder(),同时将 toolPicker 作为属性保存并 addObserver。SwiftUI 中通过 UIViewRepresentable 包装 PKCanvasView,在 updateUIView 中比较 drawing 与绑定值以避免无限更新循环。
适用场景:绘图应用、批注功能、手写笔记等。若需要形状、文本框、图片、贴纸等更完整的标记体验,可考虑 iOS 26+ 的 PaperKit,其底层仍使用 PencilKit。
限制与注意事项:工具面板仅在关联响应者成为第一响应者时显示;每个画布只应创建一个 PKToolPicker;较新墨迹类型在旧系统上可能崩溃,需设置 maximumSupportedContentVersion 保证向后兼容;PKDrawing 的 dataRepresentation 不具备确定性,比较绘图应使用相等运算符而非比较字节;导出图像前应检查绘图边界,空绘图边界为零。资料未提供收费、价格或具体性能数据。