了解如何将 paperkit 引入你的 ios、ipados、macos 以及 visionos app。我们将介绍如何将 pencilkit 绘画与标记功能 (如形状和图像) 无缝整合,以及如何自定用户界面。了解向前兼容性的最佳实践,并探索高级自定选项,以便为你的 app 打造真正与众不同的标记体验。
此文章由AI生成,可能存在错误,如有问题,请联系djs66256@163.com
了解 PaperKit:苹果全系统标注框架解析
在今年的 WWDC 上,苹果推出了一个强大的新框架——PaperKit,它为 iOS、iPadOS、macOS 和 visionOS 应用提供了统一的标注体验。本文将详细介绍 PaperKit 的核心功能、集成方法以及自定义选项。
PaperKit 简介
PaperKit 是支撑苹果全系统标注体验的基础框架,被广泛应用于备忘录、屏幕截图、快速查看和日记等原生应用中。作为一个多功能画布框架,它允许开发者轻松地在应用中添加丰富的标注功能,包括:
- PencilKit 绘画功能
- 各种标注元素(形状、图像、文本框等)
- 绘画与标注元素的组合交互
- 跨平台一致体验(包括最新的 macOS Tahoe)
核心组件
PaperKit 包含三个主要组件:
- PaperMarkupViewController:交互式创建和展示标注内容的控制器
- PaperMarkup:数据模型容器,负责保存/加载标注数据和渲染
- 插入菜单:
- iOS/iPadOS/visionOS:MarkupEditViewController
- macOS:MarkupToolbarViewController(新工具栏)
快速集成
iOS 平台集成
在 iOS 应用中集成 PaperKit 只需几个简单步骤:
override func viewDidLoad() {
super.viewDidLoad()
let markupModel = PaperMarkup(bounds: view.bounds)
let paperViewController = PaperMarkupViewController(markup: markupModel, supportedFeatureSet: .latest)
view.addSubview(paperViewController.view)
addChild(paperViewController)
paperViewController.didMove(toParent: self)
becomeFirstResponder()
let toolPicker = PKToolPicker()
toolPicker.addObserver(paperViewController)
pencilKitResponderState.activeToolPicker = toolPicker
pencilKitResponderState.toolPickerVisibility = .visible
toolPicker.accessoryItem = UIBarButtonItem(barButtonSystemItem: .add, target: self, action: #selector(plusButtonPressed(_:)))
}
macOS 平台集成
macOS 上的集成方式类似,但提供了专门的工具栏选项:
override func viewDidLoad() {
super.viewDidLoad()
let markupModel = PaperMarkup(bounds: view.bounds)
let paperViewController = PaperMarkupViewController(markup: markupModel, supportedFeatureSet: .latest)
view.addSubview(paperViewController.view)
addChild(paperViewController)
let toolbarViewController = MarkupToolbarViewController(supportedFeatureSet: .latest)
toolbarViewController.delegate = paperViewController
view.addSubview(toolbarViewController.view)
setupLayoutConstraints()
}
高级功能与最佳实践
自动保存机制
PaperKit 提供了方便的代理方法来处理标注内容的自动保存:
func paperMarkupViewControllerDidChangeMarkup(_ paperMarkupViewController: PaperMarkupViewController) {
let markupModel = paperMarkupViewController.markup
Task {
let data = try await markupModel.dataRepresentation()
try data.write(toFile: paperKitDataURL)
}
}
向前兼容性处理
对于版本兼容性问题,建议显示预渲染缩略图:
func updateThumbnail(_ markupModel: PaperMarkup) async throws {
let thumbnailSize = CGSize(width: 200, height: 200)
let context = makeCGContext(size: thumbnailSize)
context.setFillColor(gray: 1, alpha: 1)
context.fill(renderer.format.bounds)
await markupModel.draw(in: context, frame: CGRect(origin: .zero, size: thumbnailSize))
thumbnail = context.makeImage()
}
自定义功能集
PaperKit 允许开发者通过 FeatureSet 自定义可用的标注功能:
var featureSet: FeatureSet = .latest
featureSet.remove(.text)
featureSet.insert(.stickers)
// HDR 支持
featureSet.colorMaximumLinearExposure = 4
toolPicker.colorMaximumLinearExposure = 4
let paperViewController = PaperMarkupViewController(supportedFeatureSet: featureSet)
自定义背景
开发者可以设置任意 UIView 作为标注背景:
let template = UIImage(named: "MyTemplate.jpg")
let templateView = UIImageView(image: template)
paperViewController.contentView = templateView
总结
PaperKit 为苹果生态应用提供了一套完整、灵活的标注解决方案。通过简单的集成步骤和丰富的自定义选项,开发者可以轻松地为应用添加专业级的标注功能。无论是简单的笔记应用还是复杂的创意工具,PaperKit 都能满足不同场景的需求。
相关视频
充分利用 Apple Pencil 的强大功能
PencilKit 的新功能
SwiftUI 新功能
