了解如何将 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 包含三个主要组件:

  1. PaperMarkupViewController:交互式创建和展示标注内容的控制器
  2. PaperMarkup:数据模型容器,负责保存/加载标注数据和渲染
  3. 插入菜单
    • 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 新功能

文档

PaperKit