来自SCNNode对象的segue(Swift)

时间:2014-08-13 19:32:01

标签: swift segue scenekit

我正在使用带有Swift / Scenekit的XCode 6 beta 5。我有一个SCNNode(一个3D SCNText对象),我想用作一个按钮。如何将其连接到segue?使用故事板或以编程方式?我想把SCNNode的代码连接到故事板上的隐藏按钮,该按钮连接到segue但看起来有点像hackish。

2 个答案:

答案 0 :(得分:1)

就使用文本作为按钮,使用旋转立方体加载新项目。 handleTouches的内部正是您正在寻找的。

答案 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。

  1. 在故事板中,通过从(源)视图控制器本身拖动到目标视图控制器来创建segue(而不是通过从按钮或其他控件拖动)。使用检查器窗格定义segue的标识符。
  2. 如果代码中发生了触发segue的事件,请使用您定义的标识符调用performSegueWithIdentifier:。 (如果此代码位于视图控制器类中,则可以在self上调用它。否则,您将需要对视图控制器的引用以进行转换。)
  3. 正如@FlippinFun所指出的,你可以在SceneKit Game Xcode模板中找到触摸处理的代码。 (对于那些在家中跟随的人,其要点是使用视图的hitTest方法在触摸/点击位置找到场景元素。)在那里你可以调用performSegueWithIdentifier

    但是存在一个问题 - 该模板将其触摸处理代码放在视图类而不是视图控制器中,因此触摸处理代码不知道当前的视图控制器。一些可能的解决方案,从“最佳MVC架构”到“最快速和最脏”:

    1. 而不是将SCNView子类化以实现触摸处理代码,而是使用UITapGestureRecognizer实例 - 它可以在视图控制器上调用操作方法,然后您可以使用识别器{ {1}}获取locationInView的点的方法。由于您仍然在那里查看控制器代码,因此一旦获得您喜欢的命中测试结果,就可以调用hitTest

    2. self.performSegueWithIdentifier子类中,对拥有它的视图控制器保留一个(弱!)引用。然后视图的触摸处理代码可以在该视图控制器上调用SCNView。 (如果您希望保持抽象,那么视图不必知道视图控制器类,请定义协议。)

    3. performSegueWithIdentifier子类'触摸处理代码中,使用SCNView查找视图控制器,并将结果转换为视图控制器类。