SwiftUI による 3D レイアウトについて。
0:00 – Introduction
- visionOS 26 で SwiftUI の新しい Spatial Layout 機能について紹介
- 既存の 2D レイアウトツールとアイデアを使って 3D アプリケーションを構築可能
- アニメーション、リサイズ、状態管理の組み込みサポートを活用
2:47 – 3D views
- visionOS では全ての View が 3D になり、width, height に加えて depth, Z position も計算される
- カスタムの
debugBorder3Dmodifier を用いて解説 Model3DはImageと同様に固定のwidth,height,depthを持つImage,Color,Textなどはdepthが 0 で iOS と同様の動作RealityViewやGeometryReader3Dは利用可能なdepthを全て使用- 従来の SwiftUI と同じレイアウトシステム
scaledToFit3Dモディファイアでアスペクト比を維持しながら 3D 空間にフィット可能- Window では width-height のアスペクト比はユーザー操作によって代わるが、奥行きの提案はウインドウで固定されている
- Volume は深さもサイズ変更可能
ZStackの挙動
7:18 – Depth alignments
- visionOS 26 で
DepthAlignmentsが追加され、既存の Layout タイプを 3D View に適応VStackLayoutなどでdepthAlignmentモディファイアを適用して深度方向の配置を制御 (e.g.VStackLayout().depthAlignment(.center) {…)front,center,backの標準的な depth alignment を提供
- Custom Depth Alignment で
DepthAlignmentIDプロトコルに準拠した独自の配置を定義可能- e.g.
.alignmentGuide(.customAlignment) { $0[DepthAlignment.center] }
- e.g.
11:41 – Rotation layout
rotation3DLayoutモディファイアで View の回転をレイアウトシステムに反映- 従来の
rotation3DEffectは視覚効果のみでレイアウトには影響しなかったが、rotation3DLayoutはレイアウトも変更
- 従来の
- 任意の角度と軸での回転をサポート
- 例:カスタム実装の
RadialLayoutと組み合わせて 3D カルーセルを構築可能 - 複数の
rotation3DEffectを組み合わせて複雑な 3D 配置を実現
16:28 – Spatial containers
SpatialContainerで複数の View を同じ 3D 空間に配置(入れ子人形方式)- 3D alignment(
bottomFront,topTrailingBackなど)で配置を制御 - 選択状態の表示や UI 要素の重ね合わせに活用
spatialOverlayで単一の View を別の View と同じ 3D 空間に重ねるdebugBorder3Dmodifier の実装方法spatialOverlayで実装