ios - ARSession 运行但没有配置

标签 ios swift xcode arkit

当我使用 ARWorldTrackingSessionConfiguration 运行我的 ARSession 时,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 但它给了我 nil,所以我假设以上是问题所在。

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

有没有人遇到过这种情况?它现在看起来有点像 ARKit 错误,因为我的代码是直接从文档中获取的。有什么想法吗?

最佳答案

我遇到了同样的问题。看起来 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 秒后, session 开始正确确定当前帧。但是在第一次使用框架之前你应该等待这么短的时间。我用“打开相机”的动画隐藏了这 0.5 秒,所以用户不会看到这个延迟。

关于ios - ARSession 运行但没有配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44943699/

相关文章:

android - 我应该使用推送还是可以使用本地通知?

ios - iPhone 应用程序无法在 iPad 上运行

ios - 操作完成了 isFinished=YES 没有被它所在的队列启动

ios - Xcode - 无法重新创建证书和签名配置文件

ios - Braintree iOS SDK 说没有已知的类方法

iOS 多个 API 调用单个 VC - 最佳实践

swift - 在 Metal 中复制 OpenGL 混合

ios - 使用 UICollectionView 调整 UICollectionViewCell 的大小

xcode - 由于脚本错误,无法在构建阶段上传 Crashlytics dSYM 文件

使用闭包回调的ios内存泄漏