PaperKit(もちろんベータ版)をSwiftUIで試す

PaperKit

Documentより
https://developer.apple.com/documentation/paperkit

図面、図形、一貫したマークアップ体験をAppに追加します。

WWDC25動画
https://developer.apple.com/jp/videos/play/wwdc2025/285

サンプルコード

あっているのか疑問が少し残っているが、ひとまず。

import Foundation
import SwiftUI
import UIKit
import PaperKit
import PencilKit

struct PaperMarkupViewControllerRepresentable: UIViewControllerRepresentable {
    let viewSize: CGSize
    
    func makeUIViewController(context: Context) -> PaperMarkupViewController {
        let markupModel = PaperMarkup(bounds: CGRect(x: 0, y: 0, width: self.viewSize.width, height: self.self .viewSize.height))
        let paperViewController = PaperMarkupViewController(markup: markupModel, supportedFeatureSet: .latest)
        paperViewController.view.becomeFirstResponder()
        
        let toolPicker = PKToolPicker()
        toolPicker.addObserver(paperViewController)
        paperViewController.pencilKitResponderState.activeToolPicker = toolPicker
        paperViewController.pencilKitResponderState.toolPickerVisibility = .visible
        paperViewController.addButtonAction(toolPicker: toolPicker)

        return paperViewController
    }

    func updateUIViewController(_ paperMarkupViewController: PaperMarkupViewController, context: Context) {
    }

}

extension PaperMarkupViewController {
    func addButtonAction(toolPicker: PKToolPicker) {
        toolPicker.accessoryItem = UIBarButtonItem(barButtonSystemItem: .add, target: self, action: #selector(plusButtonPressed(_:)))
    }
    
    @objc func plusButtonPressed(_ button: UIBarButtonItem) {
        let markupEditViewController = MarkupEditViewController(supportedFeatureSet: .latest)
        markupEditViewController.delegate = self as? any MarkupEditViewController.Delegate
        markupEditViewController.modalPresentationStyle = .popover
        markupEditViewController.popoverPresentationController?.barButtonItem = button
        self.present(markupEditViewController, animated: true)
    }
}

SwiftSwift,SwiftUI

Posted by shi-n