用途:在 iOS、iPadOS、Mac Catalyst、visionOS 应用中实现 Apple Pencil 与手指绘图,覆盖从捕获、序列化、同步到导出的完整流程。无需额外授权或 Info.plist 配置,导入 PencilKit 并创建 PKCanvasView 即可。
主要能力:PKCanvasView 是 UIScrollView 子类,负责捕获输入并渲染笔迹,可通过 drawingPolicy 选择 .default、.anyInput 或 .pencilOnly;PKToolPicker 提供浮动工具面板,画布自动采用所选工具,支持自定义工具项(需 iOS/iPadOS 18+、visionOS 2+);PKDrawing 为值类型,可用 dataRepresentation() 持久化、PKDrawing(data:) 加载,并支持 append/appending 合并与 transformed(using:) 变换;可导出为 UIImage,也可遍历 strokes 检查墨迹类型、颜色、边界与控制点。
使用方式:设置 canvasView.delegate 并在 canvasViewDrawingDidChange(_:) 中读取 drawing;工具面板需 addObserver(canvasView)、setVisible(true, forFirstResponder:) 并调用 canvasView.becomeFirstResponder();SwiftUI 中通过 UIViewRepresentable 封装,更新时比较 drawing 避免循环。
适用场景:签名板、白板、手写笔记、自由绘图,以及需要跨设备同步或降级兼容的编辑场景。
限制:自定义工具项有系统版本要求;同步或迁移时需用 requiredContentVersion 与 maximumSupportedContentVersion 做兼容门控,接收方无法加载时应保留原始数据并提供只读预览;dataRepresentation() 不用于比较,应使用 PKDrawing 相等性;导出前需检查非空边界。PaperKit(iOS 26+)在其上扩展形状、文本框、图片等结构化标记。