【问题标题】:Import and display .usdz file in swift快速导入并显示 .usdz 文件
【发布时间】:2022-09-29 22:06:23
【问题描述】:

我尝试将一些 .usdz 文件导入应用程序并使用 SceneView 显示 3D 模型。当我显示一些已经在我的 Xcode 文件夹中的模型时,它可以工作。但是,当在我的手机上运行该应用程序并尝试从我的手机导入文件时,print(fileName) 仍然可以获得正确的文件名,但 SceneView 中没有显示任何内容......有人可以帮忙吗?

@State var fileName = \"\"
@State var openFile = false
@State var model = Model(id: 0, modelName: \"\")

var body: some View {
    VStack{
        VStack {
            Text(fileName)
                .fontWeight(.bold)

            Button {
                openFile.toggle()
            } label: {
                Text(\"Come On\")
            }
        }
        .fileImporter(isPresented: $openFile, allowedContentTypes: [.usdz]) {  result in
            switch result {
            case .success(let url):

                _ = url.startAccessingSecurityScopedResource()
                print(url)
                self.fileName = url.lastPathComponent
                print(fileName)
                model.modelName = fileName

            case.failure(let error):
                print(error)
            }
        }
        SceneView(scene: SCNScene(named: model.modelName) , options: [.autoenablesDefaultLighting,.allowsCameraControl])
            .frame(width: UIScreen.main.bounds.width, height: UIScreen.main.bounds.height / 2)

    标签: swift xcode


    【解决方案1】:

    SCNScene(named: model.modelName) 更改为 let scene = try? SCNScene(url: url!)

    例子

    struct Viewer3D: View {
    
    @State var urlLocalModel: URL?
    @State var openFile = false
    
    var body: some View {
        VStack{
            VStack {
                Button {
                    openFile.toggle()
                } label: {
                    Text("Open File Local USDZ")
                }
            }
            .fileImporter(isPresented: $openFile, allowedContentTypes: [.usdz]) {  result in
                switch result {
                case .success(let url):
                    _ = url.startAccessingSecurityScopedResource()
                    self.urlLocalModel = url
                    print(url)
                case.failure(let error):
                    print(error)
                }
            }
            if (urlLocalModel != nil) {
                let scene = try? SCNScene(url: urlLocalModel!)
                SceneView(scene: scene, options: [.autoenablesDefaultLighting,.allowsCameraControl])
                    .frame(width: UIScreen.main.bounds.width, height: UIScreen.main.bounds.width)
            }
        }
    }}
    

    【讨论】:

      猜你喜欢
      • 2021-05-18
      • 2015-05-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多