SwiftUI –将数据从SwiftUIView传递到SceneKit

问题描述 投票:1回答:1

目标:使用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线程,但没有一个对我有用。

非常感谢您的帮助!

所有人的欢呼enter image description here

目标:使用Scenekit(UIViewRepresentable)控制SwiftUI视图的SwiftUI切换按钮//显示诸如fps和计时信息之类的统计信息:这是UIViewRepresentable ...

swift xcode swiftui scenekit
1个回答
0
投票

要将数据传递到updateNSView(_:context:)

© www.soinside.com 2019 - 2024. All rights reserved.