在我的项目中,我想在ARWorldTrackingConfiguration
和ARFaceTrackingConfiguration
之间切换。
我使用两种不同类型的视图:ARSCNView
用于使用后置摄像头,ARView
用于面部跟踪。
首先,我启动ARSCNView
,然后,如果用户需要,他可以切换到面部跟踪
我以这种模式启动视图控制器:
sceneView.delegate = self
sceneView.session.delegate = self
// Set up scene content.
setupCamera()
sceneView.scene.rootNode.addChildNode(focusSquare)
let configurationBack = ARWorldTrackingConfiguration(
configurationBack.isAutoFocusEnabled = true
configurationBack.planeDetection = [.horizontal, .vertical]
sceneView.session.run(configurationBack, options: [.resetTracking, .removeExistingAnchors])
然后加载我的对象(.scn)
当我想切换到前置摄像头并传递给ARView时,请执行以下操作:
let configurationFront = ARFaceTrackingConfiguration()
// here I stop my ARSCNView session
self.sceneView.session.pause()
self.myArView = ARView.init(frame: self.sceneView.frame)
self.myArView!.session.run(configurationFront)
self.myArView!.session.delegate = self
self.view.insertSubview(self.myArView!, aboveSubview: self.sceneView)
然后我加载了.rcproject
因此,当我尝试返回后置摄像头并再次传递给ARWorldTracking时,问题就从这里开始。
这是我的方法:
// remove my ARView with face tracking
self.myArView?.session.pause()
UIView.animate(withDuration: 0.2, animations: {
self.myArView?.alpha = 0
}) { (true) in
self.myArView?.removeFromSuperview()
self.myArView = nil
}
// here I restart the initial ARSCNView
let configurationBack = ARWorldTrackingConfiguration(
configurationBack.isAutoFocusEnabled = true
configurationBack.planeDetection = [.horizontal, .vertical]
session.run(configurationBack, options: [.resetTracking, .removeExistingAnchors])
当我切换回后置摄像头时,传感器无法正确跟踪飞机。
该如何解决,如何在ARWorldTrackingConfiguration和ARFaceTrackingConfiguration之间正确切换?
预先感谢
答案 0 :(得分:0)
请确保在暂停会话时也将所有添加的节点删除到场景中。在您用self.sceneView.session.pause()
暂停会话之后,添加以下代码:
self.sceneView.scene.rootNode.enumerateChildNodes { (childNode, _) in
childNode.removeFromParentNode()
}