У меня есть два контроллера 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