我尝试将一些.usdz文件导入到应用程序中,并使用SceneView显示3D模型。当我在我的Xcode文件夹中显示一些模型时,它可以工作。但是当在我的手机上运行这个应用程序并尝试从我的手机导入文件时,打印(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)发布于 2022-09-29 14:06:23
将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)
}
}
}}https://stackoverflow.com/questions/71416712
复制相似问题