You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在visionOS设备上通过SwiftUI显示空间图像或视频?

在visionOS中用SwiftUI显示空间图像/视频的正确方式

普通的Image视图仅能渲染平面内容,要在visionOS上呈现带空间感的图像或视频,必须使用RealityKit相关组件,以下是具体实现方案:

空间图像的显示

直接使用Image3D视图(需导入RealityKit),它能识别图像中的空间元数据(比如深度信息、全景参数)并渲染出立体效果:

import SwiftUI
import RealityKit

struct SpatialImageView: View {
    var body: some View {
        Image3D(named: "your-spatial-image.heic")
            .frame(width: 2, height: 2) // 空间中显示的物理尺寸(单位:米)
            .position(x: 0, y: 1.5, z: -2) // 相对于用户视角的位置
    }
}

注意:你的图像文件必须包含空间元数据,比如用iPhone拍摄的空间照片(HEIC格式),或者带有深度层的图像。

空间视频的显示

空间视频需要结合AVPlayer和RealityKit的VideoMaterial,根据视频类型选择对应的载体(比如360视频用球体,立体视频用平面):

import SwiftUI
import RealityKit
import AVKit

struct SpatialVideoView: View {
    private let player = AVPlayer(url: Bundle.main.url(forResource: "spatial-video", withExtension: "mov")!)

    var body: some View {
        RealityView { content in
            // 360度空间视频用球体作为载体,内部渲染
            let sphere = MeshResource.generateSphere(radius: 5)
            let videoMaterial = VideoMaterial(avPlayer: player)
            videoMaterial.isDoubleSided = false // 仅内部可见
            let videoEntity = ModelEntity(mesh: sphere, materials: [videoMaterial])
            videoEntity.scale = .init(x: -1, y: 1, z: 1) // 翻转球体修正视频方向
            content.add(videoEntity)

            player.play()
        }
        .ignoresSafeArea()
    }
}

关键配置

要让空间内容正常显示,需要将视图嵌入沉浸式场景:

@main
struct YourApp: App {
    var body: some Scene {
        ImmersiveSpace(id: "ImmersiveContent") {
            SpatialImageView() // 或SpatialVideoView()
        }
        WindowGroup {
            ContentView()
        }
    }
}

内容的提问来源于stack exchange,提问作者J. Edgell

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 12:52:15