目标:使用Scenekit(UIViewRepresentable)控制SwiftUI视图的SwiftUI切换按钮]
//显示诸如fps和定时信息之类的统计信息
我做了什么:这是UIViewRepresentable ScenekitView
import SwiftUI import SceneKit struct ScenekitView : UIViewRepresentable { let scene = SCNScene(named: "art.scnassets/ship.scn")! func makeUIView(context: Context) -> SCNView { // create and add a camera to the scene let cameraNode = SCNNode() cameraNode.camera = SCNCamera() scene.rootNode.addChildNode(cameraNode) // place the camera cameraNode.position = SCNVector3(x: 0, y: 0, z: 15) // create and add a light to the scene let lightNode = SCNNode() lightNode.light = SCNLight() lightNode.light!.type = .omni lightNode.position = SCNVector3(x: 0, y: 10, z: 10) scene.rootNode.addChildNode(lightNode) // create and add an ambient light to the scene let ambientLightNode = SCNNode() ambientLightNode.light = SCNLight() ambientLightNode.light!.type = .ambient ambientLightNode.light!.color = UIColor.darkGray scene.rootNode.addChildNode(ambientLightNode) // retrieve the ship node let ship = scene.rootNode.childNode(withName: "ship", recursively: true)! // animate the 3d object ship.runAction(SCNAction.repeatForever(SCNAction.rotateBy(x: 0, y: 2, z: 0, duration: 1))) // retrieve the SCNView let scnView = SCNView() return scnView } func updateUIView(_ scnView: SCNView, context: Context) { scnView.scene = scene // allows the user to manipulate the camera scnView.allowsCameraControl = true // show statistics such as fps and timing information scnView.showsStatistics = true // configure the view scnView.backgroundColor = UIColor.black } } struct ScenekitView_Previews: PreviewProvider { static var previews: some View { ScenekitView() } }
这是控制Scenekit的菜单
import SwiftUI struct Menu: View { @State var showstats = false var body: some View { HStack { Form { Toggle(isOn:) { Text("Stats") } } .frame(width: 200.0) Spacer() } } } struct Menu_Previews: PreviewProvider { static var previews: some View { Menu() } }
这是主场景,菜单位于Scenekit的顶部:
import SwiftUI struct MainView: View { var body: some View { ZStack { ScenekitView() Menu() } } }
问题:如何将数据从ScenekitView传递到菜单,以便可以切换和显示/隐藏统计信息?
我尝试了ObservableObject,但无法使其正常工作。还查看了其他SO线程,但没有一个对我有用。
非常感谢您的帮助!
目标:使用Scenekit(UIViewRepresentable)控制SwiftUI视图的SwiftUI切换按钮//显示诸如fps和计时信息之类的统计信息:这是UIViewRepresentable ...
要将数据传递到
updateNSView(_:context:)