如何在UIViewRepresentable实例中访问ARView实例

问题描述 投票:0回答:1

在 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


swiftui uikit arkit
1个回答
0
投票

let currentFrame = arView.session.currentFrame

© www.soinside.com 2019 - 2024. All rights reserved.