再次重置 ARView 和 运行 教练覆盖
Reset ARView and run coaching overlay again
我有一个 ARView,它会在 coachingOverlay
成功完成后立即填充。
如何调用函数从另一个视图 (Navbar
) 重置此 ARView 并 运行 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)
}
}
要从 Navbar
调用指导覆盖和跟踪配置,请使用 属性。
我想您不需要重置 ARView 本身。您需要做的就是使用以下选项重新运行会话:.resetTracking
和 .removeExistingAnchors
。它删除了以前的跟踪地图,您可以从头开始。
arView.session.run(config, options: [.removeExistingAnchors, .resetTracking])
此外,如果您想将 Coaching Overlay 视为单次操作,然后必须将其关闭,请使用以下设置:
coachingOverlayView.activatesAutomatically = false
我有一个 ARView,它会在 coachingOverlay
成功完成后立即填充。
如何调用函数从另一个视图 (Navbar
) 重置此 ARView 并 运行 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)
}
}
要从 Navbar
调用指导覆盖和跟踪配置,请使用
我想您不需要重置 ARView 本身。您需要做的就是使用以下选项重新运行会话:.resetTracking
和 .removeExistingAnchors
。它删除了以前的跟踪地图,您可以从头开始。
arView.session.run(config, options: [.removeExistingAnchors, .resetTracking])
此外,如果您想将 Coaching Overlay 视为单次操作,然后必须将其关闭,请使用以下设置:
coachingOverlayView.activatesAutomatically = false