在我的ARKit应用程序中,我提出了一个模态窗口.当我关闭模态并返回到ARSCNView时,我发现由于此代码,会话暂停:
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
// Pause the view's session
sceneView.session.pause()
}
Run Code Online (Sandbox Code Playgroud)
当我关闭模态并返回到ARKit相机视图屏幕时,此代码被触发:
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
// Create a session configuration
let configuration = ARWorldTrackingSessionConfiguration()
// Run the view's session
sceneView.session.run(configuration)
}
Run Code Online (Sandbox Code Playgroud)
但是这段代码永远不会恢复会话.屏幕在其读取的最后一张图像上完全冻结.有任何想法吗?
我将viewDidAppear代码更新为以下内容.它仍然卡在相机屏幕上,图像被冻结.
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
// Create a session configuration
let configuration = ARWorldTrackingSessionConfiguration()
sceneView.session.delegate = self
if self.isPaused {
sceneView.session.run(sceneView.session.configuration!)
} else {
// Run the view's session
sceneView.session.run(configuration)
}
}
Run Code Online (Sandbox Code Playgroud)
ric*_*ter 11
不确定为什么你的会话没有恢复,但是...这通常不是你想要的情况.
请注意自述文件附带Apple的ARKit示例代码(附加到ARKit上的WWDC17会话):
避免中断AR体验.如果用户转换到应用中的另一个全屏UI,则AR视图在返回时可能不是预期的状态.
使用弹出式演示(甚至在iPhone上)用于辅助视图控制器,以在调整设置或进行模式选择时使用户保持AR体验.在此示例中,
SettingsViewController和VirtualObjectSelectionViewController类使用popover演示.
更详细一点:如果您暂停会话,当您的用户离开不同的全屏视图控制器时,它将无法跟踪世界.这意味着当您恢复时,放置在场景中的任何虚拟内容都不会位于您离开它的位置(相对于摄像机).
小智 5
我不知道 iOS 11 GM Seed 或 XCode 9 GM Seed 版本今天是否修复了这个问题,但是我可以像原始问题一样使用代码成功恢复暂停的 ARSCNview。
sceneView.session.run(sceneView.session.configuration!)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5160 次 |
| 最近记录: |