如何通过使用不同的类来切换 SceneKit 视图

Posted

技术标签:

【中文标题】如何通过使用不同的类来切换 SceneKit 视图【英文标题】:How to switch SceneKit views by utilizing different classes 【发布时间】:2019-03-24 21:10:47 【问题描述】:

我希望用户看到三个 sceneKit 视图。这是一个 Xcode Playground,所以我没有故事板,否则这会很简单。当某个布尔值变为真或假时,我需要更改 Playground 的 liveView。

我尝试使用 if 语句来检查这两个布尔值是 false 还是 true,然后根据它们更改我的 liveView,但问题是设置 liveView 的代码只运行一次,这意味着它将始终坚持第一次分配的视图。


    physics = false
    lit = true
    if(lit == true)
    
        let vc = LitController()
        vc.preferredContentSize = CGSize(width: 375, height: 812) //iPhone X
        PlaygroundPage.current.liveView = vc

    
    else if(physics == true)
    
        let vc = PhysicsController()
        vc.preferredContentSize = CGSize(width: 375, height: 812) //iPhone X
        PlaygroundPage.current.liveView = vc

     else
    

        let vc = MyViewController()
        vc.preferredContentSize = CGSize(width: 375, height: 812) //iPhone X
        PlaygroundPage.current.liveView = vc
    


我希望它不断运行,以便我可以在必要时切换视图,这可能吗?如果不是,我还能做些什么来执行我想要的?

【问题讨论】:

【参考方案1】:

我建议将它放在物理变量的didSet 中。另一种可能的方法是将现有代码包装在一个函数中,并创建另一个更改变量的函数。第二个函数在调用时应该调用第一个函数。这样可以确保在您显式更改变量时运行此代码。但是,我强烈建议为此使用didSet,因为它每次都会运行变量更改。 如果您感到困惑,这里有几个示例。

class ExampleClass 
    var boolean : Bool 
        switchViews()
    
    func switchViews()
        //Code here
    

每当boolean 更改值时,都会调用switchViews()。下一个示例使用两个函数方法。

var boolean:Bool = true
func changeBoolean(_ to:Bool)
    boolean = to
    switchViews()

func switchViews()
    //Code here

//Changes boolean value and calls switchViews()
changeBoolean(false)

如前所述,这是另一种方式。我会推荐第一个。希望这会有所帮助,如果上面的代码包含错误或不起作用,请告诉我。

【讨论】:

另外,你应该使用switch 而不是else if 嗨@Ritz Beast,如果这个或任何答案解决了您的问题,请点击复选标记考虑accepting it。这向更广泛的社区表明您已经找到了解决方案,并为回答者和您自己提供了一些声誉。没有义务这样做。

以上是关于如何通过使用不同的类来切换 SceneKit 视图的主要内容,如果未能解决你的问题,请参考以下文章

如何做多个不同的类来生成 XML?

如何让一个由 ControllerAdvice 注释的类来处理不同类型的异常?

带有 SceneKit 的 SwiftUI:如何使用视图中的按钮操作来操作底层场景

[Java]_[初级]_[Observer和Observable失效后如何使用java.beans包下的类来实现观察者模式]

Scenekit:如何获取节点的所有材质?

SwiftUI – 将数据从 SwiftUIView 传递到 SceneKit