Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 如何在一个iOS应用程序中运行两个单独的ARKit体验_Swift_Scenekit_Augmented Reality_Arkit_Realitykit - Fatal编程技术网

Swift 如何在一个iOS应用程序中运行两个单独的ARKit体验

Swift 如何在一个iOS应用程序中运行两个单独的ARKit体验,swift,scenekit,augmented-reality,arkit,realitykit,Swift,Scenekit,Augmented Reality,Arkit,Realitykit,我在一个应用程序中运行两个ARKit体验时遇到问题。我有一个主菜单视图控制器,它运行两种体验中的任何一种。看起来是这样的: MainVC-mainUIViewController,有两个按钮选择体验 ARVC1-第一次体验UIViewController ARVC2-第二次体验UIViewController 两种体验都是独立的,彼此之间不需要传递任何数据。 不幸的是,当我关闭ARVC1或ARVC2并运行第二个会话时,不知何故我有上一个ARSession的痕迹(上一个会话的静止帧会闪烁一段时

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

  • MainVC
    -main
    UIViewController
    ,有两个按钮选择体验
  • ARVC1
    -第一次体验
    UIViewController

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

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

arView.debugOptions = [.showStatistics]

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

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

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

arView.session.run(configuration, options: [.resetTracking,.removeExistingAnchors,.stopTrackedRaycasts])
它也有助于
UINavigationController
转换(使其更平滑),因为
ARSession
是在视图显示之前配置的,它消除了使用
ARSession
运行新
ARConfiguration
时出现的黑色闪烁

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

[Session]会话(0x160879b40):是否失败,错误:error Domain=com.apple.arkit.error Code=102“所需传感器失败。” UserInfo={NSLocalizedFailureReason=传感器未能传递 必需输入,NSUnderlyingError=0x283f959b0{错误 Domain=AVFoundationErrorDomain Code=-11800“无法执行该操作 已完成“UserInfo={NSLocalizedFailureReason=未知错误 发生(-12780),NSLocalizedDescription=无法执行该操作 已完成,NSUnderlyingError=0x283efc8a0{错误 域=NSOSStatusErrorDomain代码=-12780“(空)”}}, nsLocalizedRecoverysSuggestion=确保应用程序具有 所需隐私设置,NSLocalizedDescription=所需传感器 失败。}2020-01-09 16:20:38.600835+0000应用程序[573:231750] [技术]全球跟踪性能受资源影响 约束条件[3]2020-01-09 16:20:38.600977+0000 应用程序[573:231750][technology]VIO错误回调:8506.590769, 3、帧时间戳不是无序就是重复


经过更深入的调查,我发现我的ARVIEW闪烁问题是由内存泄漏引起的(其中一位代表并不“弱”)。正因为如此,我一次有不止一次纵火。在消除漏洞后,我将继续在单独的视图控制器中创建arview,这样它就不必在MainVC的后台运行。