ストリーミングはほとんどのブラウザと
Developerアプリで視聴できます。
-
Apple Pencilを最大限に活用
iOS 18、iPadOS 18とvisionOS 2の新機能として、PencilKitツールピッカーでカスタム属性を使用し、包括的なカスタムツールを利用できるようになりました。システム全体におけるツール選択と同等の優れた体験をもたらすツールピッカーで、カスタムの描画体験を実現する方法を確認しましょう。ロール角度、スクイーズジェスチャ、触覚フィードバックなど、Apple Pencil Proに搭載された新機能の利用方法もご紹介します。
関連する章
- 0:00 - Introduction
- 1:16 - Configuring the tool picker
- 5:20 - Custom tools in the tool picker
- 8:47 - Apple Pencil Pro features and APIs
リソース
- Apple Pencil
- Apple Pencil updates
- Configuring the PencilKit tool picker
- Forum: UI Frameworks
- Human Interface Guidelines: Apple Pencil and Scribble
- Playing haptic feedback in your app
関連ビデオ
WWDC20
WWDC19
-
ダウンロード
こんにちは Samです 描画機能を担当する ソフトウェアエンジニアです このセッションでは PencilKitツールピッカーと Apple Pencil APIの 進化について説明します これにより アプリで表現力豊かな描画を 行えるようになります PencilKitを使用すると 豊かな描画体験を 非常に簡単に生み出すことができます また PencilKitツールピッカーは プラットフォームの 最新機能をすべて統合できます iPadで非常にうまく機能し 応答性の高いピッカーとして さまざまな描画や手書きの ワークフローに合わせて調整できます iPhoneでは ドッキングにより 利用可能なスペースに すべてのツールとコントロールが表示されます
Apple Vision Proでは ウインドウのすぐ外側に浮かぶ オーナメントとして表示されます そして Apple Pencil Proでは 手がどこにあってもスクイーズするだけで PencilKitツールピッカーを 利用できるようになりました まず アプリに適したツールセットで 構成できる ツールピッカーの新機能について 説明します 次に カスタムツールをツールピッカーに 直接組み込む方法を紹介します そして最後に 描画体験を Apple Pencil Proに統合するための 新しいAPIをいくつか紹介します まず ツールピッカーの新機能の デモを見てみましょう 開発中のアプリで猫の絵を描きました このアプリでは PencilKitで描いたストロークの横に 動物の形をスタンプできます このプロジェクトのソースコードは このセッションのリソースで入手可能です 私のアプリには ペンや消しゴムなどの ツールだけでなく 動物ツールもあります 動物ツールをタップすると 色 サイズ そして カスタムシェイプのピッカーの コントロールが表示されます このツールのさまざまなプロパティを 変更すると ピッカー内のアイテムが選択したものに 応じてを更新されます
さらに Apple Pencil Proの スクイーズなどの機能も きちんとサポートされており コードを追加する必要はありません スクイーズすると カスタムツールが PencilKitツールと一緒に 円弧状に表示されます スタンプのプロパティを調整して それぞれの猫にぴったりの足跡を完成させます
私のスタンプツールは Apple Pencil Proの バレルロール角度に対応しているため 足跡を正確に回転させて配置できます いいですね これでこのボタンをタップすると ツールピッカー内で直接絵にサインできます
iOS 13以降 PKToolPickerは PencilKitツールのフルセットを使用して 簡単に初期化できるようになりました アプリにPKToolPickerを 追加する方法については 「Introducing PencilKit」セッションで 基本事項をご確認ください iPadOS 18およびvisionOS 2の新機能として ツールピッカーで使用可能なツールを 定義できるようになりました ツールピッカーは PKCanvasViewや 独自の描画キャンバス またはその両方と組み合わせて 使うことができます
インクツールを使用して PKCanvasViewにストロークを描画する ツールを作成する場合は 同じ種類のツールを 複数含めることもできます 例えばこれは 注釈用のアプリで 2色のペンや2色のマーカーを 表示する場合に最適です PKToolPickerItemには 様々な種類があり ピッカーに必要な あらゆるものを提供できます 新しい toolItemsイニシャライザを使用して アプリに合わせて順序やツールセットを カスタマイズできます インク 消しゴム なげなわツールのアイテムには 対応するPKToolがあります これらは PencilKitがキャンバス上に 何かを描画するために使用するツールです キャンバスビューがツールピッカーの オブザーバとして設定されている場合 これらのツールは自動的に PKCanvasViewの ツールプロパティに設定されます ルーラーは他のアイテムとは異なります タップすると 選択される代わりに オンとオフが切り替わります ルーラーアイテムには 対応するPKToolはありません キャンバスに何も描画しないからです このアイテムがタップされると 監視中のPKCanvasViewにより isRulerActiveプロパティが 自動的に切り替わります
または ツールピッカーのオブザーバを使用して カスタムキャンバスのルーラーを 切り替えます
スクリブル機能は Apple Pencilの手書き入力を 自動的にテキストに変換するのに最適です
スクリブルアイテムをピッカーに追加すると スクリブルと描画機能を 1か所に統合して ペンシルモードを切り替えることができます スクリブルツールを選択すると カラーウェルが キーボードのショートカットバーの コントロールに置き換えられます スクリブルツールは スクリブルを有効にする Apple Pencil設定の環境設定に応じて 自動的に非表示になります アプリでスクリブルを設定する方法の詳細は 「Meet Scribble for iPad」セッションで ご確認ください カスタムアイテムを使用すれば PKToolPickerで PencilKit以外の あらゆるツールを使用できます 例えばこれは 先ほど紹介したスタンプツールですが このツールはアプリが提供するものなら 何でもかまいません カスタムアイテムについては 後ほど詳しく説明します また iPadOS 18と visionOS 2の新機能として PKToolPickerでは アクセサリのUIBarButtonItemを 後端に設定できるようになりました このボタンは 描画ツール以外の キャンバスアクションを 表示するために使います 例えばテキストボックスの挿入や 背景の設定などです ここで提供するアクションは アプリのUIの他の場所でも 使用できなければなりません ピッカーを最小化すると このボタンは非表示になるからです 次に 描画キャンバスから ツールピッカーのツールを 作成する方法について説明します PKToolPickerはこれまで PKCanvasViewで使用するツールを選択 する最良の方法として利用されてきました 今では カスタムツールにより ツールピッカーは自分の描画ツールにも 使用できるようになりました
PKToolPickerは PKCanvasView 独自の描画キャンバス またはその両者の組み合わせとともに 使用できます カスタムツールを使えば システムペンシルツールをアクションに統合し 動物のスタンプの例のようなアクションや 描画によって制御される 写真レタッチツールなどで キャンバスをユニークにすることができます
カスタムツールアイテムを選択すると 監視中のPKCanvasViewで 描画がオフになります カスタムツールでは アプリがレンダリングを行い PencilKitがツールの選択を行います
PKToolPickerCustomItemと そのConfigurationを使用すると ツールの機能に適合する独自のアイテムを 作成できます Configuration構造体を使用して ツールがサポートする プロパティを定義します PencilKitが提供する 色と幅のプロパティのコントロールは ツールの動作に合わせて構成できます その他のプロパティについては ビューコントローラを渡して さらに多くのコントロールを表示します PencilKitは クロージャに提供した 事前レンダリング済みの 画像を使用して ピッカーに カスタムツールアイテムを表示します
PencilKitは 幅や色 不透明度が変更されるたび 新しい画像を取得するために このクロージャを呼び出します カスタム属性が変更された時に 呼び出す必要がある reloadImageメソッドもあります ツール画像ではツールのプロパティを どのように表現できるか検討してください UILabel.drawText(in:)は テキストインジケータを ツールに描画するのに最適です たとえば不透明度の値を表す場合です 最後に Apple Pencil Proの パワフルな機能を アプリで活用する方法を紹介します Apple Pencil Proは アプリでの描画体験をさらに向上させる 膨大な数の新機能を備えています 例えば 私がNotesで計画している このサルサガーデンに いくつか簡単な変更を加えたいと思います コリアンダーのラベルに下線を引くのに 最適なツールを選ぶため Apple Pencil Proをスクイーズすると マウスをホバーしている場所に ツールピッカーが表示されます ペンツールの色を変更し 下線を引きます
気に入らないので 取り消して 代わりにハイライト表示にします Apple Pencil Proをスクイーズし 取り消しボタンを長押しして スライダを表示します これでスライドするだけで 複数の操作を取り消すことができます
もう一度スクイーズして マーカーツールに切り替えます Apple Pencilを使用すると さまざまな動きで表現力豊かなストロークを 簡単に作成できます 高さや傾きを変更したり 筆圧を変えてみることもできます
Apple Pencil Proでは バレルを回転させることで 創作を進められるようになりました
アプリでPKCanvasViewを 使用している場合は マーカーと万年筆でこれを実行できます Apple Pencil Proを使用する場合 バレルを回転させると ストロークの角度を制御できます すべてのPencilKitツールでは Apple Pencil Proをホバーすると その下に 特定のツールを表す影が表示されます マーカーツールを使用して コリアンダーのラベルをハイライトします ストロークの最後に一時停止して 図形認識をトリガします トリガされると 触覚フィードバックが手に伝わり 認識が成功したことがわかります スナップが生き生きしますね NotesはPencilKitを使用して この緊密な統合を実現していますが 独自のカスタム描画キャンバスと 統合するためのAPIセットも 豊富に用意されています まず 新しい取り消しスライダを 見てみましょう Apple Pencil Proの新機能である スクイーズジェスチャを使用すると スライダにアクセスして 取り消し/やり直しの履歴を すばやく操作できます これは PKToolPickerを 使っていない場合でも すべてのアプリで使用できます この動作を抑制したい場合は スクイーズアクションに応答する メソッドを実装するデリゲートを使用して UIPencilInteractionをインストールします 描画機能を備えたアプリでは スクイーズによって ペンを離すことなく アプリを操作できるという 新たな機能が加わりました
スクイーズを 個別のアクションを実行する 単一のジェスチャとして扱うことで アプリの使いやすさが向上します デバイスのグローバル環境設定では Apple Pencil Proがスクイーズされた時に アプリが行うべき動作を指定できます これにはコンテキストツールパレットの表示や システムショートカットの実行といった 新しいオプションも含まれます
ただし ショートカットを実行するように 設定されている場合 アプリにスクイーズイベントは 送信されません UIPencilInteractionは サポートされている デバイスでアプリにダブルタップまたは スクイーズイベントを送信する時に ペンシルのホバーポーズ情報も 送信するようになりました ポーズは ディスプレイ上の Apple Pencil Proの配置場所を示します これには 画面上の位置 画面からのZオフセット 傾き 高さ ロール角度が含まれます PencilKitは PKToolPickerを スクイーズから表示する時に このポーズ情報を使用して PKToolPickerを配置します この情報は 独自のツールピッカーでも使用できます これがそれを実行するコードです ここではスクイーズイベントを受け取る デリゲートメソッドを実装しています スクイーズした時にユーザーが パレットを表示するかどうかを確認し スクイーズが終了したら ホバーの位置を 可能であればパレット表示に送ります UIPencilInteractionの アップデートに加えて Apple Pencilを操作するための まったく新しいSwiftUI APIもあります これは onPencilSqueezeモディファイアを 使用した SwiftUIでの同じ例です 環境設定とフェーズを確認し 可能な場合はホバー位置を取得します ツールピッカーでこれらのAPIを採用して 設定で選択されているものと 一貫性を保ちます またはPKToolPickerを使用して 追加コードなしで これらすべての動作を取得します Apple Pencil Proは 触覚フィードバックを返すのに 既存のSwiftUIおよび UIKitのフィードバックAPIを使用します これらのAPIは 様々な場所で既に使われており コントロールの状態が変わった時に フィードバックを返したりします
フィードバックAPIは プラットフォームの特性や設定に応じて さまざまなコンテキストで さまざまなタイプのフィードバックを 提供するように 調整されています 例えば触覚 オーディオ またはその両方が 返されたり 何も返されなかったりします
位置合わせのスナップとパスの完了のための 新しいフィードバックAPIは SwiftUIとUIKitの両方で利用できます
APIは より多くのコンテキストを把握して 特定のイベントに 最適なフィードバックを決定するために 位置を使用するようになりました これは 新しいUICanvasFeedback Generatorクラスの例です カスタムキャンバスが レイアウトガイドにスナップしたら そこでフィードバックジェネレータに 位置合わせが発生したことを伝えます また 描画したストロークを きれいな形状にスナップするために カスタムシェイプ認識ロジックが トリガされたら フィードバックジェネレータに パスが完了したことを伝えます UIFeedbackGeneratorと そのすべてのサブクラスは フィードバックを生成する時に 初期化のビューとそのビュー内のポイントを 取得するように更新されました ビューには 生成するフィードバックに 近いものを選択します たとえばキャンバスビューです UIFeedbackGeneratorを使用している すべての情報を更新してください それによってUIKitが アプリに最適なフィードバックを 提供できるようになります UICanvasFeedbackGeneratorに加えて SwiftUIは SensoryFeedback構造体で 位置合わせとpathCompleteも提供します ここには 他の場所で増分される 2つのState整数があります ガイドに合わせる時と 描画したストロークが 形状にスナップする時です これらの操作のために キャンバス上の最も具体的なビューに sensorsyFeedbackモディファイアを 追加しました これにより トリガ値が変わるたびに フィードバックが要求されます SwiftUIのSensoryFeedback または UIKitのUICanvasFeedbackGeneratorの いずれかを採用することで Apple Pencil Proでカスタムキャンバスを 生き生きと描き出すことができます 詳細については Apple Developerドキュメントの記事 「Playing haptic feedback in your app」をご覧ください バレルロール角度を使用すると ストロークの表現が一段と豊かになります バレルロール角度はユーザーインターフェイスの 要素を制御するためではなく 描画したストロークに情報を付与するために 使用します ロール位置を使用すると カスタムストロークの応答性を改善できます
手の中で回転させると先端の角度が変化する 実際のツールを模倣したストロークなどは 最適な候補です
ロール角度と傾き角度を一緒に追加すると さまざまな動きにうまく対応し ロールをサポートしていないデバイスに フォールバックを提供できます rollAngleは UITouchと UIHoverGestureRecognizerの 両方で使用できます それにより 先ほど動物の スタンプのプレビューで示したように カスタムツールでのホバー体験を 向上させることができます 指のタッチを受け付ける場合 方向と速度は ストロークを変化させるための 適切なフォールバックオプションです ロールは最初に送信された時に推定され 後でBluetooth経由で更新されます ストロークの最も正確な最終値を 取得するには touchesEstimatedPropertiesUpdated を必ず実装してください また これらすべてのApple Pencil機能を 実装するためのベストプラクティスについては 更新されたヒューマンインターフェイス ガイドラインをご覧ください
以上が Pencilの新機能です 次にすべきことは何でしょうか PKToolPickerを採用すると 新しいツール選択の方法を 緊密にシステム統合された機能と 少ないコードで実現できます また PKToolPickerでは カスタムのツールも PencilKitツールと一緒に提供できます さらに Apple Pencil Proとの統合に利用できる 豊富なAPIセットを使って カスタム描画体験を強化できます これで必要なものはすべて揃いました Apple Pencilを最大限に活用してください ご視聴ありがとうございました
-
-
10:24 - Respond to squeeze in UIKit
class MyViewController: UIViewController, UIPencilInteractionDelegate { func pencilInteraction(_ interaction: UIPencilInteraction, didReceiveSqueeze squeeze: UIPencilInteraction.Squeeze) { if UIPencilInteraction.preferredSqueezeAction == .showContextualPalette && squeeze.phase == .ended { let anchorPoint = squeeze.hoverPose?.location ?? myDefaultLocation presentMyContextualPaletteAtPosition(anchorPoint) } } }
-
10:46 - Respond to squeeze in SwiftUI
@Environment(\.preferredPencilSqueezeAction) var preferredAction @State var contextualPalettePresented = false @State var contextualPaletteAnchor = MyPaletteAnchor.default var body: some View { MyView() .onPencilSqueeze { phase in if preferredAction == .showContextualPalette, case let .ended(value) = phase { if let anchorPoint = value.hoverPose?.anchor { contextualPaletteAnchor = .point(anchorPoint) } contextualPalettePresented = true } } }
-
11:50 - Provide canvas feedback in UIKit
class MyViewController: UIViewController { @ViewLoading var feedbackGenerator: UICanvasFeedbackGenerator override func viewDidLoad() { super.viewDidLoad() feedbackGenerator = UICanvasFeedbackGenerator(view: view) } func dragAlignedToGuide(_ sender: MyDragGesture) { feedbackGenerator.alignmentOccurred(at: sender.location(in: view)) } func snappedToShape(_ sender: MyDrawGesture) { feedbackGenerator.pathCompleted(at: sender.location(in: view)) } }
-
12:29 - Provide canvas feedback in SwiftUI
@State var dragAlignedToGuide = 0 @State var snappedToShape = 0 var body: some View { MyView() .sensoryFeedback(.alignment, trigger: dragAlignedToGuide) .sensoryFeedback(.pathComplete, trigger: snappedToShape) }
-
-
特定のトピックをお探しの場合は、上にトピックを入力すると、関連するトピックにすばやく移動できます。
クエリの送信中にエラーが発生しました。インターネット接続を確認して、もう一度お試しください。