ios - 如何在使用 RealityKit、ARKit 和 SwiftUI 时触发函数来保存和加载世界地图数据?
问题描述
我正在使用RealityKit、 ARKit 和SwiftUI构建增强现实应用程序。内容视图有一个 ZStack,其中包含 ARView 和层叠在其上的 Swift 视图。
更具体地说,ARView 以 ARContentView() 的形式存在——一个包装 ARViewContainer() 的快速视图,它本身代表 RealityKit 中的 ARView。
我正在添加下面代码的照片。
带有 ZStack 的 contentView,包括分层的 UI 视图和 ARContentView
目标是让用户能够保存和加载世界地图数据,以便在他们关闭并重新打开他们的应用程序后保持 AR 体验。
问题是我试图通过单击 SwiftUI 视图中的按钮来触发保存和加载世界地图数据的功能,而这些按钮必须触发在 ARView 中保存和加载世界地图数据的功能。
我可以通过向视图添加手势(例如向上滑动)来触发代码以从 ARView 中保存世界地图数据,如下所示,但我需要从内容视图按钮中实际链接这些功能。
真正让我困惑的是:
因为 ARView 已经由 Apple 定义,我只能通过扩展它并添加新功能来向它添加功能,所以我不能向它添加一个绑定变量来跟上内容视图中的事件状态(因为存储变量不能添加到扩展中)。
如何在 ZStack 中包含 ARContentView 的父 SwiftUI 视图中触发这些不同的 ARView 相关操作?
同样......问题仍然存在,当 ARView 中发生事件时,如何将返回的信息发送回 SwiftUI 内容视图,以便它可以更改其状态变量并触发动画?(这可能是一个单独的问题,但问题的基础仍然是这两种视图之间的联系)
启动一个新的增强现实 RealityKit 项目时免费提供的 ARViewContainer 结构有几个函数 - makeUIView() 和 updateUIView() 包含在其中,但我还没有找到任何关于如何使用 updateUIView() 函数的教程。
ARContainerView 的图像采用 var 进行构造以及其中的函数
我想知道 ARContainerView 结构中的 updateUIView() 函数是否可以解决我在这些层之间的连接问题,如果是,如何使用它,如果不是,如何解决问题?
如果有任何不清楚的地方,请告诉我。谢谢您的帮助。
解决方案
当您需要在您的SwiftUI
视图和UIViewRepresentable
容纳您的视图之间进行协调时ARView
,您可以使用ARViewCoordinator
andARSessionDelegate
在它们之间传递数据。当我有时间时,我会加载一个示例,或者您可以在 Youtube 上查看 Reality School 以获得教程。
推荐阅读
- ruby - 在初始化和其他类方法中使用 self 时如何工作?
- windows - =::=::\\ 变量是什么?
- excel - 如果在 Excel 中输入日期,则尝试将行移动到另一个工作表
- python - 了解python while循环
- c# - 如何为 LZMA (7zip) SDK 编码器.Code() 函数创建回调函数?
- c# - C# WPF Visual Studio 资源显示在设计器中但不在运行时
- python - 如何从丑陋的数据行创建一个整洁的表格?
- c++ - 在 C++20 标准库中删除了 operator!=
- ms-access - 如何解决 Microsoft Access 错误 3043
- django - heroku上的django DB连接问题