• 3次元におけるSwiftUI

    visionOSアプリに深さと次元を足す準備をしましょう。ボリュームでアプリに3次元オブジェクトを持ち込む方法を発見し、Model 3D APIについて知り、コンテンツを配置し動的にする方法を学びます。またRealityViewでのUIアタッチメントの使用方法とコンテンツのジェスチャーのサポート方法をご紹介します。

    関連する章

    リソース

    関連ビデオ

    WWDC23

  • ダウンロード
    Array
    • 3:35 - MoonView

      struct MoonView {
        var body: some View {
          Model3D(named: "Moon") { phase in
            switch phase {
            case .empty:
              ProgressView()
            case let .failure(error):
              Text(error.localizedDescription)
            case let .success(model):
              model
                .resizable()
                .scaledToFit()
            }
          }
        }
      }
    • 17:26 - Manipulation Gesture

      // Gesture combining dragging, magnification, and 3D rotation all at once.
      var manipulationGesture: some Gesture<AffineTransform3D> {
          DragGesture()
              .simultaneously(with: MagnifyGesture())
              .simultaneously(with: RotateGesture3D())
              .map { gesture in
                  let (translation, scale, rotation) = gesture.components()
      
                  return AffineTransform3D(
                      scale: scale,
                      rotation: rotation,
                      translation: translation
                  )
              }
      }
      
      // Helper for extracting translation, magnification, and rotation.
      extension SimultaneousGesture<
          SimultaneousGesture<DragGesture, MagnifyGesture>,
          RotateGesture3D>.Value {
          func components() -> (Vector3D, Size3D, Rotation3D) {
              let translation = self.first?.first?.translation3D ?? .zero
              let magnification = self.first?.second?.magnification ?? 1
              let size = Size3D(width: magnification, height: magnification, depth: magnification)
              let rotation = self.second?.rotation ?? .identity
              return (translation, size, rotation)
          }
      }