从SKScene过渡到UIViewcontroller

时间:2016-07-11 15:04:52

标签: ios swift uiviewcontroller sprite-kit

例如,如果我有:

class SpriteKitScene: SKScene {
...
}

在那里我想要一个图像,当点击(按下,点击,触摸任何东西) 使用以下命令加载另一个文件:

class UiViewcontrollerScene: UIViewcontroller {
...
}

我知道如何从SKScene过渡到SKScene,但我需要从SKScene过渡到UIViewcontroller。

1 个答案:

答案 0 :(得分:1)

首先,使用视图控制器的协议为自己设置一个委托。

protocol UIViewControllerDelegate{
}

请参阅此处:https://makeapppie.com/2014/07/01/swift-swift-using-segues-and-delegates-in-navigation-controllers-part-1-the-template/以获取有关如何执行此操作的精彩教程

创建一个将托管此委托的SKView类

class GameView : SKView
{
       var delegate : UIViewControllerDelegate?
}

然后在UIViewController类的viewDidLoad中,将委托分配给视图控制器。

override func viewDidLoad()
{
    if let view = self.view as? GameView
    {
        view.delegate = self
    }
}

现在你的视图有一个视图控制器的委托,从这时起,在你的协议文件中,制作一个转换方法

E.G。

protocol UIViewControllerDelegate
{
    optional  func transitionToMenuVC()
}

然后将代码应用于视图控制器类。

class ViewController : UIViewController, UIViewControllerDelegate
{
   ...
   func transitionToMenuVC()
   {
       // do transition code here
   }
}

现在您已经为视图设置了所有设置,以便与您的视图控制器进行通信。

在场景中,您只需将场景视图投射到GameView,然后使用代理转换

class GameScene : SKScene
{
  ...
  func transition()
  { 

       if let view = self.view as? GameView
       {
           view.delegate.transitionToMenuVC()
       }
  }
}

请注意,不可能从场景转换到视图控制器,因为它们是2种不同的动物。您将转换视图,因此使用为视图提供的动画而停留。