从 SCNNode 对象转场(Swift)
Posted
技术标签:
【中文标题】从 SCNNode 对象转场(Swift)【英文标题】:segue from SCNNode object (Swift) 【发布时间】:2014-08-13 19:32:01 【问题描述】:我正在使用带有 Swift / Scenekit 的 XCode 6 beta 5。我有一个要用作按钮的 SCNNode(一个 3D SCNText 对象)。如何将其连接到 segue?使用故事板还是以编程方式?我想将 SCNNode 的代码连接到故事板上的一个隐藏按钮,该按钮连接到 segue,但这似乎有点 hackish。
【问题讨论】:
【参考方案1】:这与performing a segue from a map annotation 的情况相同,在multiple segues from the same table cell 之间动态选择、执行转场in response to SpriteKit event handling 或您需要执行转场以响应代码中发生的事情的任何其他情况 而不是响应用户点击您在 IB 中设置的控件。您需要“手动”转场。
-
在情节提要中,通过从(源)视图控制器本身拖动到目标视图控制器(而不是通过从按钮或其他控件拖动)来创建转场。使用检查器窗格定义 segue 的标识符。
当您的代码中发生应该触发 segue 的事情时,请使用您定义的标识符调用
performSegueWithIdentifier:
。 (如果此代码在视图控制器类中,您可以在 self
上调用它。否则,您将需要对视图控制器的引用才能从中分离。)
正如@FlippinFun 所指出的,您可以在 SceneKit 游戏 Xcode 模板中找到用于触摸处理的代码。 (对于那些在家跟随的人,它的要点是使用视图的hitTest
方法在触摸/点击位置找到场景元素。)在那里你可以调用performSegueWithIdentifier
。
但是有一个问题——该模板将其触摸处理代码放在视图类而不是视图控制器中,因此触摸处理代码不知道当前视图控制器。一些可能的解决方案,排名从“最佳 MVC 架构”到“最快速和最肮脏”:
不要子类化SCNView
来实现触摸处理代码,而是使用UITapGestureRecognizer
实例——它可以在你的视图控制器上调用一个动作方法,然后你可以使用识别器的locationInView
方法来得到一个点,你可以hitTest
。由于您仍在查看控制器代码中,因此您可以在获得您喜欢的命中测试结果后调用self.performSegueWithIdentifier
。
在SCNView
子类中,保留对拥有它的视图控制器的(弱!)引用。然后视图的触摸处理代码可以在该视图控制器上调用performSegueWithIdentifier
。 (如果你想保持抽象以便视图不必知道视图控制器类,请定义一个协议。)
在SCNView
子类的触摸处理代码中,使用self.window.rootViewController
查找视图控制器,并将结果转换为您的视图控制器类。
【讨论】:
【参考方案2】:就使用文本作为按钮而言,使用旋转立方体加载一个新项目。 handleTouches 的内部正是您要寻找的。p>
【讨论】:
我已经做到了,我想要代码打开一个新的视图控制器(连接到一个segue)以上是关于从 SCNNode 对象转场(Swift)的主要内容,如果未能解决你的问题,请参考以下文章
SceneKit - 在另一个 SCNNode 上添加 SCNNode
如何在“func renderer(SCNSceneRenderer, nodeFor: ARAnchor) -> SCNNode?”中旋转 SCNNode?