从 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?

将 collada (dae) 文件加载到 SCNNode (Swift - SceneKit)

swift:安全访问 SCNNode 数组的字典

Swift 3 将 .dae 文件加载到 SCNNode

Swift SceneKit 也不是圆形球体