【问题标题】:Presenting a View Controller with an xib from an SKScene使用来自 SKScene 的 xib 呈现视图控制器
【发布时间】:2014-02-26 20:00:36
【问题描述】:

我尝试了很多东西,但都没有奏效。我有一个SKScene,当游戏结束时,我希望它回到原来的视图控制器。先感谢您。

我已经在我的 SKScene 中尝试过这个

homeScreenViewController *viewCont = [[homeScreenViewController alloc] init];
            [viewCont viewDidLoad];

这在我的另一个视图控制器中

constructinoViewController *view = [[constructinoViewController alloc ] init];
        [self presentViewController:view animated:YES completion:nil];

它主要是说视图不在视图层次结构中

【问题讨论】:

  • 向我们展示您尝试过的代码并定义什么不起作用...
  • 您的 ViewController 层次结构是什么样的?你的 SpriteKit 场景是如何呈现的?
  • 你这是什么意思?它呈现在原始视图控制器中

标签: ios objective-c sprite-kit skscene


【解决方案1】:

您需要一种向父 viewController 发送消息的方法。

在呈现 SKScene 的 viewController 中,在 viewDidLoad 中添加以下行:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(closeScene) name:@"closeScene" object:Nil];

另外,添加这个方法

-(void)closeScene
{
    //Remove the SKView, or present another viewController here.

    [[NSNotificationCenter defaultCenter] removeObserver:self name:@"closeScene" object:nil];
}

然后在您的 SKScene 中,在您的游戏结束时,

[[NSNotificationCenter defaultCenter] postNotificationName:@"closeScene" object:nil];

您也可以通过使用委托来做到这一点。

【讨论】:

  • 非常感谢!!唯一的问题是它仍然没有回到视图控制器。正在调用 closeScene 方法。我还需要做其他事情吗?
  • 好的,请在问题中再附加两部分代码。 1-用于呈现场景。 2-您在其中呈现 SKScene 的 viewController 的类名以及您想要从场景中呈现的类名
  • 好的,场景从“levelOneViewController”呈现,呈现方式类似于SKView * skView = (SKView *)self.view; skView.showsFPS = 否; skView.showsNodeCount = 否; // 创建和配置场景。 SKScene * 场景 = [level1 sceneWithSize:skView.bounds.size];场景.scaleMode = SKSceneScaleModeAspectFill; // 呈现场景。 [skView presentScene:scene];
  • 我想从 skscene 中预置的类是 homeViewController
  • 您需要在 closeScene 方法中添加更多代码,该方法将实际呈现新的 viewController。我在该部分留下了评论,因此您也可以在其中发布一些代码。
【解决方案2】:

如果你已经展示了 ViewController,那么你需要关闭它以返回到之前的 ViewController。

你应该使用

[self dismissViewControllerAnimated:YES completion:NULL];

【讨论】:

  • 不幸的是,我会把这个放在哪里?我不能把它放在 SKScene 中
  • 您需要向视图控制器发送通知,将您的 SKScene 添加到其视图中。考虑 ViewController1 呈现 ViewController2 并且在 ViewController2 的视图中,您添加了游戏场景。游戏结束后,向 ViewController2 发出通知,并在通知函数中编写上述代码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-02-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-16
  • 2013-10-26
相关资源
最近更新 更多