【问题标题】:Transition from SKScene to UIViewcontroller从 SKScene 过渡到 UIViewcontroller
【发布时间】:2016-07-11 15:04:52
【问题描述】:

例如,如果我有:

class SpriteKitScene: SKScene {
...
}

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

class UiViewcontrollerScene: UIViewcontroller {
...
}

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

【问题讨论】:

  • 你必须抓住rootViewController。然后你可以从那里正常呈现。无论如何,在使用 spritekit 时,如果你没有真正的理由去做你想要实现的事情,你应该坚持使用过渡。当然,在某些情况下,您必须例如在当前视图上以模态方式呈现一些东西,但这仍然是 SpriteKit。请问您这样做的原因是什么?
  • @Whirlwind 我不确定如何“获取”rootViewController,并且我正在尝试进行游戏工具包匹配,所以我想从精灵工具包菜单过渡到搜索匹配项,到目前为止还没有运气。
  • 只需搜索如何从场景中呈现视图控制器。我不在电脑前,所以我不能写一个合适的答案。但你可能会弄清楚。这很简单。
  • 看看这个:stackoverflow.com/q/21578391 它可以给你一些想法(阅读每个答案)。所以,委托、通知或获取根视图控制器并呈现新视图都可以工作。
  • @Whirlwind 那是objective-c。我用 swift。

标签: ios swift uiviewcontroller sprite-kit


【解决方案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
    }
}

现在您的视图有一个到您的视图控制器的委托,从这一点开始,在您的协议文件中,创建一个转换方法

例如

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()
       }
  }
}

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

【讨论】:

  • 类 GameView : SKView { var delegate : UIViewControllerDelegate? } 给我一个错误:使用未声明的类型 'UIViewControllerDelegate'
  • @Asphys 怎么样
  • 你需要做那个协议,教程叫它FooTwoViewControllerDelegate,我叫它UIViewControllerDelegate
  • @KnightOfDragon 出于某种原因,它只是没有过渡。我可能做错了什么。您可以将示例项目发布到 github 之类的地方吗?
  • 我不打算这样做。如果你想创建一个临时项目,按照我在 git hub 中解释的所有内容,我会查看它,但你需要先对其进行测试,并确保你可能遗漏了一些东西,否则我将无济于事。 (基本上不创建模板和复制粘贴我的代码,我想看看重现你的问题的一些努力)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-28
  • 1970-01-01
  • 1970-01-01
  • 2014-03-01
  • 1970-01-01
相关资源
最近更新 更多