2

ARKit在一个应用程序中运行两种体验时遇到问题。我有主菜单视图控制器,它运行任何一种体验。它看起来像这样:

  • MainVC- 主要UIViewController有两个按钮来选择体验
  • ARVC1- 第一次体验UIViewController
  • ARVC2- 第二次经历UIViewController

两种体验都是独立的,不需要在彼此之间传递任何数据。不幸的是,当我关闭ARVC1ARVC2运行第二个时,不知何故我有前一个的痕迹ARSession(上一个会话的静止帧会闪烁一次)。我可以ARSession以某种方式完全重置吗?它似乎停留在背景中的某个地方。当我关闭任何视图控制器时,我试图暂停会话,但它没有帮助。

如果我打开ARVC1并按下按钮显示统计信息,也会发生同样的情况:

arView.debugOptions = [.showStatistics]

关闭ARVC1并再次打开它后,它仍然显示统计信息,因此它在后台某处运行。

4

1 回答 1

1

我找到了解决问题的方法:

在打开和关闭ARVC1并快速打开后,ARVC2我正在经历以前ARSession的闪烁ARSession。为了解决这个问题,我ARView在 my 中创建MainVC并将对它的引用传递给目标控制器,在那里我以编程方式设置arView约束。为避免使用以下ARAnchors选项传递 I 重置配置viewDidLoad

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

它也有助于UINavigationController过渡(使其更平滑),因为ARSession在呈现视图之前进行了配置,并且它消除了在运行 new 时出现的黑色ARConfiguration闪光ARSession

它还消除了我在快速关闭和打开ViewController包含ARView有时会导致应用程序崩溃时遇到的控制台错误(如下):

[会话]会话(0x160879b40):确实失败并出现错误:错误域=com.apple.arkit.error Code=102“所需传感器失败。” UserInfo={NSLocalizedFailureReason=传感器未能提供所需的输入。,NSUnderlyingError=0x283f959b0 {错误域=AVFoundationErrorDomain Code=-11800“操作无法完成” UserInfo={NSLocalizedFailureReason=发生未知错误(-12780),NSLocalizedDescription =操作无法完成,NSUnderlyingError=0x283efc8a0 {Error Domain=NSOSStatusErrorDomain Code=-12780 "(null)"}}},NSLocalizedRecoverySuggestion=确保应用程序具有所需的隐私设置。,NSLocalizedDescription=所需的传感器失败。} 2020-01-09 16:20:38.600835+0000 应用[573:

于 2020-01-09T16:24:49.467 回答