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

如何在visionOS中以编程方式捕获用户眼前的视图内容

在VisionOS中捕获用户眼前的视图内容解决方案

VisionOS的界面基于空间渲染逻辑,传统UIKit的UIView.renderedImage或UIWindow快照方法只针对2D层级视图,无法捕获3D空间中的组件,你可以试试以下两种可行方案:

SwiftUI场景下:使用captureSnapshot()方法

SwiftUI为VisionOS提供了原生的视图捕获API,能够直接捕获当前视图(包括空间组件)的快照:

import SwiftUI

struct ContentView: View {
    @State private var capturedImage: UIImage?
    
    var body: some View {
        VStack {
            Button("捕获当前视图") {
                Task {
                    capturedImage = await body.captureSnapshot()
                }
            }
            
            capturedImage.map {
                Image(uiImage: $0)
                    .resizable()
                    .scaledToFit()
                    .frame(width: 300, height: 300)
            }
        }
        .padding()
    }
}

UIKit场景下:使用UIWindowScene快照

如果你的项目基于UIKit,需要通过UIWindowScene的snapshot方法来捕获整个场景的内容,包括空间中的组件:

import UIKit

class VisionViewController: UIViewController {
    @IBAction func triggerCapture(_ sender: UIButton) {
        guard let windowScene = view.window?.windowScene else {
            print("无法获取当前窗口场景")
            return
        }
        
        windowScene.snapshot { image in
            guard let capturedImage = image else {
                print("快照捕获失败")
                return
            }
            // 示例:保存到相册
            UIImageWriteToSavedPhotosAlbum(capturedImage, self, #selector(imageSaved(_:didFinishSavingWithError:contextInfo:)), nil)
        }
    }
    
    @objc private func imageSaved(_ image: UIImage, didFinishSavingWithError error: Error?, contextInfo: UnsafeRawPointer) {
        if let error = error {
            print("保存图片失败:\(error.localizedDescription)")
        } else {
            print("图片保存成功")
        }
    }
}

关键注意事项

  • 权限配置:必须在Info.plist中添加NSScreenCaptureUsageDescription键,填写捕获屏幕内容的用途说明,否则会触发权限错误甚至崩溃。
  • 沉浸式空间适配:对于ImmersiveSpace中的视图,captureSnapshot()同样有效,只需在对应的视图层级中调用即可。
  • 传统方法失效原因:VisionOS的空间组件不属于传统的2DUIView层级,而是通过ARKit和空间渲染管线绘制,因此传统快照方法无法识别这些内容。

内容的提问来源于stack exchange,提问作者adrD

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 20:22:25