swift - SwiftUI:如何使用非模拟器支持的框架和 PreviewProvider?
问题描述
我正在开发一个 RealityKit 应用程序,并使用 SwiftUI。
PreviewProvider
当然,RealityKit 视图在 SwiftUI预览中不起作用。但我的问题是,即使是简单且完全隔离的 SwiftUI 视图也无法预览,因为PreviewProvider
需要编译整个项目。
我的 SwiftUI View 类没有以任何方式连接到 ARView 代码。如果我只是去“文件”->“新建”并选择一个 SwiftUI 文件,然后尝试在画布中预览它(⌥ + ⌘ + ↵)就足够了,没有任何更改。然后它会给我那个错误。只是我的代码中有任何不受画布预览支持的代码的事实,就会.xcodeproj
产生错误。
我收到这样的错误:
Value of type 'ARView' has no member 'installGestures'
我现在唯一的两个解决方案是 1)将文件复制到 Playground 并在那里进行试验,然后在完成后复制回来。2) 在处理视图之前注释掉所有不受支持的 RealityKit 相关代码。
问:当然,这些解决方案都不是最优的。有没有更好的解决方案?
解决方案
我遇到了同样的问题。我的解决方案是使用 targetEnvironment(simulator) 编译器指令,如下所示:
struct ContentView : View {
var body: some View {
#if !targetEnvironment(simulator)
ARViewContainer()
.edgesIgnoringSafeArea(.all)
.statusBar(hidden: true)
#endif
}
}
}
#if !targetEnvironment(simulator)
struct ARViewContainer: UIViewRepresentable {
func makeUIView(context: Context) -> ARView {
let arView = ARView(frame: .zero)
// ARKit / RealityKit specific code
...
return arView
}
func updateUIView(_ arView: ARView, context: Context) {}
}
#endif
推荐阅读
- sql - 在 SQL Server 查询中截断小数位不返回确切值
- javascript - 正则表达式匹配字母数字和破折号字符的 CSV,具有最小数量的值和最小的值长度
- android - 非消耗性应用内购买能否在应用登录后持续存在?
- regex - Perl 正则表达式:结合 ^ 与 \Q \E
- mysql - 可重复读取mysql
- android - Android Studio 布局编辑器
- c - 使用 C 套接字将客户端源端口设置为侦听端口
- ubuntu - 使用 anonip.py 将 Apache 日志中的 IP 匿名化与使用 Cronolog 的日志轮换相结合
- r - 卸载并重新安装 Quantstrat 以进行全新和干净的设置 R
- python - Bigquery Python API 多线程不会提高性能