【发布时间】:2021-12-31 18:56:39
【问题描述】:
我正在尝试在 SwiftUI 中使用 SCNBox 创建一个旋转立方体,您可以在其中点击框的每一侧并显示不同的弹出屏幕/视图显示文本等。我有旋转 SCNBox 立方体,但我该如何制作它可点击和交互,我如何让它重定向到另一个视图?
这就是我目前尝试将 Box Scene 插入 SwiftUI 视图的方式,然后该视图将进入现有应用程序的视图层次结构。
import SwiftUI
import SceneKit
class BoxNode: SCNNode {
override init() {
super.init()
self.geometry = SCNBox(width: 1, height: 1, length: 1, chamferRadius: 0.0)
self.geometry?.firstMaterial?.shininess = 50
let action = SCNAction.rotate(by: 360 * CGFloat(Double.pi / 180), around: SCNVector3(x:0, y:1, z:0), duration: 8)
let repeatAction = SCNAction.repeatForever(action)
self.runAction(repeatAction)
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
struct BoxScene: View {
var scene = SCNScene(named: "MyScene")
var cameraNode: SCNNode? {
scene?.rootNode.childNode(withName: "camera", recursively: false)
}
var boxNode: SCNNode? {
scene?.rootNode.addChildNode(BoxNode())
}
var body: some View {
SceneView(
scene: scene,
pointOfView: cameraNode,
options: []
)
}
}
但是,此代码无法编译 - 它表示“表达式类型不明确,下一行中没有更多上下文:
var boxNode: SCNNode? {
scene?.rootNode.addChildNode(BoxNode())
}
【问题讨论】:
-
如何在 SwiftUI 视图中显示 SCNBox?您应该显示该代码。
-
目前我正试图弄清楚如何做到这一点。我想将 SCNBox 集成到带有标签的现有应用程序中。目标是让此框进入其中一个选项卡(当前使用 TabView),一旦您点击框的一侧,您将获得 (a) 一个弹出窗口,和/或 (b) 重定向到另一个应用程序中的选项卡。问题是将盒子集成到现有应用程序中(目前它们是单独的 Xcode 项目。提前致谢!
-
你将需要展示比你已经完成的更多的代码。目前你没有提供足够的代码来帮助你。
-
刚刚编辑了我的原始问题以添加您在上面请求的代码......虽然它没有编译。
-
您可能需要继承 SKScene 并覆盖 touchesBegan 以捕获触摸事件。你可以将闭包传递给你的子类,这样你就可以对你的触摸事件采取行动。