在 SwiftUI 中使用
ARView
(UIkit / RealityKit / ARkit 类型)的标准模式是定义一个 UIViewRepresentable
结构并在应用程序的 ContentView
中使用它
如下:
struct ContentView : View {
var body: some View {
ARViewContainer().edgesIgnoringSafeArea(.all)
}
}
struct ARViewContainer: UIViewRepresentable {
func makeUIView(context: Context) -> ARView {
let arView = ARView(frame: .zero)
// configure arView
return arView
}
func updateUIView(_ uiView: ARView, context: Context) {}
}
在后面的代码中,我希望能够访问由
arView
方法。以下尝试使 makeUIView
成为属性并不
工作,因为 arView
是一个结构
因此不能有可变属性:ARViewContainer
我可以执行以下操作,但这感觉不对,我怀疑该实例 意味着可重用(例如单例),这打破了这种模式 (我的应用程序中只有一个
struct ARViewContainer: UIViewRepresentable {
var arView : ARView! // ERROR : struct is immutable
func makeUIView(context: Context) -> ARView {
arView = ARView(frame: .zero)
// configure arView
return arView
}
func updateUIView(_ uiView: ARView, context: Context) {}
}
实例,但代码仍然很难闻):
ARView
那么如何“捕获”由
struct ARViewContainer: UIViewRepresentable {
let arView = (frame: .zero)
func makeUIView(context: Context) -> ARView {
// configure arView
return arView
}
func updateUIView(_ uiView: ARView, context: Context) {}
}
创建的
arView
对象呢?
我稍后可以访问吗?我最终想做的是能够捕捉到
当用户点击屏幕或按钮时 AR 框架,但为了做到这一点,我以某种方式
需要访问 makeUIView
实例:arView
let currentFrame = arView.session.currentFrame