ArKit теряет ориентацию на мир после переключения с другого контроллера представления обратно на ARSCNView - PullRequest
0 голосов
/ 17 мая 2019

У меня есть два контроллера ViewController, один с ARSCNView, а другой только с некоторыми данными.Когда я переключаюсь со второго контроллера вида на первый, я не могу заставить ARSession работать правильно.

Я уже говорил о том, как сохранить карту мира и восстановить ее после нажатия кнопки «Назад» от одного вида к другому.

Я также попробовал все средства сброса в сеансе, которые уже предоставлены здесь при переполнении стека

Я перезаписал эти методы:

override func viewWillDisappear(_ animated: Bool) {
        super.viewWillDisappear(animated)
        // Pause the view's session
        sceneView.session.pause()
        print("view did disappear")
        sceneView.session.getCurrentWorldMap { (worldMap, error) in
            guard let worldMap = worldMap else {
                print("Error getting current world map.")
                return
            }

            do {
                try self.archive(worldMap: worldMap)
                DispatchQueue.main.async {
                    print("World map is saved.")
                }
            } catch {
                fatalError("Error saving world map: \(error.localizedDescription)")
            }
        }
    }


override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        let worldMapData = retrieveWorldMapData(from: worldMapURL)
        var worldMap: ARWorldMap? = nil
        if worldMapData != nil {
            worldMap = unarchive(worldMapData: worldMapData!)
        }
        resetTrackingConfiguration(with: worldMap)
    }

    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
        // self.mode = .showFeaturePoints
    }

    func resetTrackingConfiguration(with worldMap: ARWorldMap? = nil) {
        let configuration = ARWorldTrackingConfiguration()
        configuration.planeDetection = [.horizontal]

        let options: ARSession.RunOptions = [.resetTracking, .removeExistingAnchors]
        if let worldMap = worldMap {
            configuration.initialWorldMap = worldMap
            print("Found saved world map.")
        } else {
            print("Move camera around to map your surrounding space.")
        }

        sceneView.debugOptions = [.showFeaturePoints, .showWireframe]
        sceneView.session.run(configuration, options: options)
    }

Я просто хочу свою ARSessionработать нормально после нажатия кнопки возврата UINavigation

...