【问题标题】:How to run two separate ARKit experiences in one iOS app如何在一个 iOS 应用中运行两种不同的 ARKit 体验
【发布时间】:2020-04-25 03:22:26
【问题描述】:

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

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

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

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

arView.debugOptions = [.showStatistics]

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

【问题讨论】:

    标签: swift scenekit augmented-reality arkit realitykit


    【解决方案1】:

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

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

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

    它对UINavigationController 过渡也有帮助(使其更平滑),因为ARSession 是在视图呈现之前配置的,它消除了当您使用ARSession 运行新的ARConfiguration 时出现的黑色闪光.

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

    [Session] 会话(0x160879b40):确实失败并出现错误:错误 Domain=com.apple.arkit.error Code=102 “所需传感器失败。” UserInfo={NSLocalizedFailureReason=传感器未能传递 所需输入。,NSUnderlyingError=0x283f959b0 {错误 Domain=AVFoundationErrorDomain Code=-11800 "操作不能 已完成" UserInfo={NSLocalizedFailureReason=未知错误 发生 (-12780), NSLocalizedDescription=操作不能 完成,NSUnderlyingError=0x283efc8a0 {错误 域=NSOSStatusErrorDomain 代码=-12780 "(null)"}}}, NSLocalizedRecoverySuggestion=确保应用程序具有 所需的隐私设置。, NSLocalizedDescription=所需的传感器 失败。} 2020-01-09 16:20:38.600835+0000 应用程序[573:231750] [技术] 世界追踪性能受资源影响 约束 [3] 2020-01-09 16:20:38.600977+0000 App[573:231750] [技术] VIO错误回调:8506.590769, 3、帧时间戳要么乱序要么重复

    【讨论】:

    • 经过深入调查后,我发现我的 ARView 闪烁问题是由内存泄漏引起的(其中一位代表并不“弱”)。因此,我一次运行了多个 ARSession。消除泄漏后,我回到在单独的视图控制器中创建 ARView,因此它不必在 MainVC 的后台运行。
    猜你喜欢
    • 2016-01-11
    • 2013-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-16
    相关资源
    最近更新 更多