我正在使用带有Swift / Scenekit的XCode 6 beta 5。我有一个SCNNode(一个3D SCNText对象),我想用作一个按钮。如何将其连接到segue?使用故事板或以编程方式?我想把SCNNode的代码连接到故事板上的隐藏按钮,该按钮连接到segue但看起来有点像hackish。
答案 0 :(得分:1)
就使用文本作为按钮,使用旋转立方体加载新项目。 handleTouches的内部正是您正在寻找的。 p>
答案 1 :(得分:1)
这与performing a segue from a map annotation的情况相同,在multiple segues from the same table cell之间动态选择,执行segue in response to SpriteKit event handling,或者您需要执行segue以响应发生的事情的任何其他情况在您的代码中,而不是响应用户点击您在IB中设置的控件。你需要一个“手动”的segue。
performSegueWithIdentifier:
。 (如果此代码位于视图控制器类中,则可以在self
上调用它。否则,您将需要对视图控制器的引用以进行转换。)正如@FlippinFun所指出的,你可以在SceneKit Game Xcode模板中找到触摸处理的代码。 (对于那些在家中跟随的人,其要点是使用视图的hitTest
方法在触摸/点击位置找到场景元素。)在那里你可以调用performSegueWithIdentifier
。
但是存在一个问题 - 该模板将其触摸处理代码放在视图类而不是视图控制器中,因此触摸处理代码不知道当前的视图控制器。一些可能的解决方案,从“最佳MVC架构”到“最快速和最脏”:
而不是将SCNView
子类化以实现触摸处理代码,而是使用UITapGestureRecognizer
实例 - 它可以在视图控制器上调用操作方法,然后您可以使用识别器{ {1}}获取locationInView
的点的方法。由于您仍然在那里查看控制器代码,因此一旦获得您喜欢的命中测试结果,就可以调用hitTest
。
在self.performSegueWithIdentifier
子类中,对拥有它的视图控制器保留一个(弱!)引用。然后视图的触摸处理代码可以在该视图控制器上调用SCNView
。 (如果您希望保持抽象,那么视图不必知道视图控制器类,请定义协议。)
在performSegueWithIdentifier
子类'触摸处理代码中,使用SCNView
查找视图控制器,并将结果转换为视图控制器类。