0

我正在将 XCode 6 beta 5 与 Swift / Scenekit 一起使用。我有一个要用作按钮的 SCNNode(一个 3D SCNText 对象)。如何将其连接到 segue?使用故事板还是以编程方式?我想将 SCNNode 的代码连接到故事板上的隐藏按钮,该按钮连接到 segue,但这似乎有点骇人听闻。

4

2 回答 2

1

这与从地图注释执行转场、在同一表格单元格中的多个转场之间动态选择、执行转场以响应 SpriteKit 事件处理或您需要执行转场以响应某事的任何其他情况相同。这发生在您的代码中,而不是响应用户点击您在 IB 中设置的控件。你需要一个“手动”的segue。

  1. 在情节提要中,通过从(源)视图控制器本身拖动到目标视图控制器(而不是通过从按钮或其他控件拖动)来创建转场。使用检查器窗格定义 segue 的标识符。
  2. 当您的代码中发生应该触发 segue 的事情时,请performSegueWithIdentifier:使用您定义的标识符进行调用。(如果此代码在视图控制器类中,您可以调用它 on self。否则,您将需要对视图控制器的引用才能从中分离。)

正如@FlippinFun 指出的那样,您可以在 SceneKit Game Xcode 模板中找到用于触摸处理的代码。(对于那些在家跟随的人,它的要点是使用视图的hitTest方法在触摸/单击位置找到场景元素。)在那里你会调用performSegueWithIdentifier.

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

  1. 与其使用子类SCNView来实现触摸处理代码,不如使用一个UITapGestureRecognizer实例来代替——它可以在您的视图控制器上调用一个操作方法,然后您可以使用识别器的locationInView方法来获得一个可以使用的点hitTest。由于您仍然在那里查看控制器代码,因此您可以self.performSegueWithIdentifier在获得您喜欢的命中测试结果后调用。

  2. SCNView子类中,保留对拥有它的视图控制器的(弱!)引用。然后视图的触摸处理代码可以调用performSegueWithIdentifier该视图控制器。(如果你想保持抽象,这样视图就不必知道视图控制器类,定义一个协议。)

  3. SCNView子类的触摸处理代码中,用于self.window.rootViewController查找视图控制器,并将结果转换为您的视图控制器类。

于 2014-08-13T22:10:56.527 回答
1

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

于 2014-08-13T21:06:16.407 回答