新登場の PaperKit。がっつり UIKit ベースの実装で懐かしさを感じた。Apple Pencil 結局使いこなせていない、、空間アクセサリとして対応する日が来たら、また変わるのかもしれない。
0:00 – イントロダクション
- PaperKit は Apple のシステム全体で使われているマークアップ体験を支えるフレームワーク
- Notes やスクリーンショット、QuickLook、Journal アプリなどで利用
- キャンバス上で描画や多様なマークアップ要素(図形、画像、テキストボックス等)を追加できる
- macOS Tahoe でも同様のリッチなマークアップ体験を提供
1:36 – PaperKitの基本知識
- PaperKit の主な3コンポーネント
PaperMarkupViewController:インタラクティブなマークアップ・描画の提供PaperMarkup:データモデルコンテナ・PaperKit マークアップ、PincilKit 描画データの保存・読み込み、レンダリングMarkupEditViewControllerorMarkupToolbarViewController(macOS):挿入メニュー
3:35 – PaperKitの導入
- iOSアプリへの導入例:
UIViewControllerのviewDidLoad()内でPaperMarkupとPaperMarkupViewControllerを初期化PaperMarkupは初期化時にboundsを指定
- PencilKit のツールピッカー(PKToolPicker)と連携し、ツールの表示や操作を制御
paperViewControllerと紐づけツールピッカーの状態変化に動的に応答
UIResponder.pencilKitResponderState.activeToolPicker/.toolPickerVisibility- アクセサリボタンから挿入メニューを呼び出し、マークアップ要素を追加
MarkupEditViewController
- macOS アプリでも同様の手順で導入可能。ツールバーUIで挿入メニューを提供
- SwiftUI 環境でも
UI/NSViewControllerRepresentableで統合可能 - デリゲートや
Observable対応で状態管理や自動保存も柔軟 - ディスク読み込みのデータに対し、前方互換性のためコンテンツバージョンの検証が必要
- 不一致時はアラートでアップグレードを訴求/あらかじめレンダリングされたサムネイル表示
- PaperKit の前方互換性担保の仕組み:
CGContextにmarkupModel.draw(…)
8:37 – 機能セットのカスタマイズ
- PaperKit の全機能は
FeatureSetで管理 FeatureSet.latestで最新機能を一括利用可能remove/insertで利用可能なツールやインクを細かく制御- HDR対応も可能(
colorMaximumLinearExposureプロパティで設定) - カスタマイズした
FeatureSetを各コントローラに適用し、アプリ全体で一貫した体験を実現 paperViewController.contentViewのカスタマイズで独自テンプレートや背景も設定可能(カスタムビューを指定することで、マークアップの下のレイヤーとしてレンダリングされる)