Ios 当我回到包含ARSCNView的viewcontroller时,相机冻结。如何在该视图控制器中进出而不使ARSCNView停止工作?

Ios 当我回到包含ARSCNView的viewcontroller时,相机冻结。如何在该视图控制器中进出而不使ARSCNView停止工作?,ios,swift,arkit,arscnview,Ios,Swift,Arkit,Arscnview,如何初始化ARSCNView var sceneView: ARSCNView? override func viewDidLoad() { super.viewDidLoad() if ARConfiguration.isSupported{ sceneView = ARSCNView(frame: CGRect(x: 0, y: 0, width: UIScreen.main.bounds.size.width, height: UIScreen.main.

如何初始化ARSCNView

var sceneView: ARSCNView?

override func viewDidLoad() {
    super.viewDidLoad()
    if ARConfiguration.isSupported{
        sceneView = ARSCNView(frame: CGRect(x: 0, y: 0, width: UIScreen.main.bounds.size.width, height: UIScreen.main.bounds.size.height))

        view.addSubview(sceneView!)

        sceneView!.delegate = self
        // Show statistics such as fps and timing information
        sceneView!.showsStatistics = false

        // Create a new scene
        let scene = SCNScene(named: "totens.scnassets/Main.scn")!
        // Set the scene to the view
        sceneView!.scene = scene
     }
  }

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)

        guard let referenceImages = ARReferenceImage.referenceImages(inGroupNamed: "TotensImages", bundle: nil) else { return }

        let configuration = ARImageTrackingConfiguration()
        configuration.trackingImages = referenceImages
        let options: ARSession.RunOptions = [.removeExistingAnchors]

        sceneView!.session.run(configuration, options: options)
 }
当关闭此视图控制器并尝试重新启动会话时,相机将停止显示。
有人知道怎么帮我吗?谢谢

好的,这不是修复它的最佳方法,但它可能会起作用

在拥有ARScene视图的ViewController上,必须初始化一个bool标志,该标志将检查是否必须运行配置。所以

var shouldDoThingsInViewWillAppear: Bool = true
    override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
if shouldDoThingsInViewWillAppear {
shouldDoThingsInViewWillAppear = false
        guard let referenceImages = ARReferenceImage.referenceImages(inGroupNamed: "TotensImages", bundle: nil) else { return }

        let configuration = ARImageTrackingConfiguration()
        configuration.trackingImages = referenceImages
        let options: ARSession.RunOptions = [.removeExistingAnchors]

        sceneView!.session.run(configuration, options: options)
    }

 }
如果这样做的话,这意味着您不应该运行两次会话,或者不应该添加两次跟踪图像

如果没有,请尝试对ViewDidDisplay而不是ViewWillDisplay执行相同的操作

如果下面尝试将run方法更改为

sceneView.session.run(configuration, options: [.resetTracking, .removeExistingAnchors])

如何显示上一个视图控制器中的视图控制器?您可能在以前的视图控制器上保留了一个出口,这使得视图控制器保留在内存中,而不会从垃圾收集器中删除。因此,您可能在呈现相同的视图控制器之后。
@IBAction func openScanView(u发送方:Any){performsgue(带有标识符:“scansegue”,发送方:nil)}
my view controller的显示方式如下@Βα∑ίληΔ。好的,我将向您发布一个关于TRI的答案。我相信您的选项中缺少重置跟踪功能,但请检查场景。我从一开始就再次尝试,效果良好!谢谢,它对我有用!