重置ARView并再次运行教练叠加。

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

我有一个ARView,它将被填充,一旦 coachingOverlay 已成功完成。

我如何从另一个视图中调用一个函数来重置这个ARView(Navbar)并运行 coachingOverlay 再次初始化AR?

struct ContentView : View {
    var body: some View {
        ZStack {
            ARViewContainer().edgesIgnoringSafeArea(.all)
            VStack {
                Spacer()
                Navbar()
            }
            .padding()
        }
    }
}

struct ARViewContainer: UIViewRepresentable {

    func makeUIView(context: Context) -> ARView {

        let arView = ARView(frame: .zero)

        arView.addCoaching()

        let config = ARWorldTrackingConfiguration()
        config.planeDetection = .horizontal
        arView.session.run(config, options: [])

        return arView

    }

    func updateUIView(_ uiView: ARView, context: Context) {}

}

extension ARView: ARCoachingOverlayViewDelegate {
    func addCoaching() {
        let coachingOverlay = ARCoachingOverlayView()
        coachingOverlay.delegate = self
        coachingOverlay.session = self.session
        coachingOverlay.autoresizingMask = [.flexibleWidth, .flexibleHeight]

        coachingOverlay.goal = .anyPlane
        self.addSubview(coachingOverlay)
    }

    public func coachingOverlayViewDidDeactivate(_ coachingOverlayView: ARCoachingOverlayView) {
        // Load the "Box" scene from the "Experience" Reality File
        let boxAnchor = try! Experience.loadBox()

        // Add the box anchor to the scene
        self.scene.anchors.append(boxAnchor)
    }
}
struct Navbar: View {

    let arView = ARView()

    var body: some View {
        Button(action: {
            //
        }) {
            Image(systemName: "trash")
                .foregroundColor(Color.black)
                .padding()
        }
        .background(Color.white)
    }
}
ios swift swiftui arkit
1个回答
0
投票

为了调用教练叠加和跟踪配置,我从 Navbar协调人 属性。

我想你不需要重置ARView本身。你需要做的就是用以下选项重新运行一个会话。.resetTracking.removeExistingAnchors. 它删除了以前的跟踪图,你可以从头开始。

arView.session.run(config, options: [.removeExistingAnchors, .resetTracking])

另外,如果您想一次性查看教练叠加操作,然后必须关闭它,请使用以下设置。

coachingOverlayView.activatesAutomatically = false
© www.soinside.com 2019 - 2024. All rights reserved.