ARSession运行但没有配置

时间:2017-07-06 08:33:56

标签: ios swift xcode arkit

当我使用ARSession运行ARWorldTrackingSessionConfiguration时,sceneView.session属性似乎不会保留配置。这是我的代码

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)

    // Create a session configuration
    let configuration = ARWorldTrackingSessionConfiguration()

    configuration.planeDetection = .horizontal

    // Run the view's session
    sceneView.session.run(configuration)
}

我在sceneView.session.run(configuration)上放了一个断点,它给了我以下

po sceneView.session
<ARSession: 0x1c83c8520 currentFrame=0x0 timestamp=0.000000 configuration=(null)>

注意:configuration=(null)

我后来试图访问sceneView.session.currentFrame但是它给了我零,所以我认为上面是问题。

我在iPad Pro 2017上运行它,它确实支持ARWorldTrackingSessionConfiguration,我也尝试过只使用ARSessionConfiguration,但这给了我同样的东西。

还有其他人经历过这个吗?它现在看起来像一个ARKit错误,因为我的代码是直接从文档中获取的。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

我有同样的问题。并且看起来ARSession不会立即运行。我通过短暂的延迟来解决它:

    sceneView.session.run(configuration)
    DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) { [weak sceneView] in
        guard let cameraTransform = sceneView?.session.currentFrame?.camera.transform else { return }
        /* now you can use cameraTransform */
    }

在0.2 - 0.5秒后,会话开始正确确定当前帧。但在第一次使用框架之前,你应该等待这么短的时间。我用“打开相机”的动画隐藏了0.5秒,因此用户不会看到这种延迟。