如何通过使用不同的类来切换 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 视图的主要内容,如果未能解决你的问题,请参考以下文章
如何让一个由 ControllerAdvice 注释的类来处理不同类型的异常?
带有 SceneKit 的 SwiftUI:如何使用视图中的按钮操作来操作底层场景
[Java]_[初级]_[Observer和Observable失效后如何使用java.beans包下的类来实现观察者模式]