我的GameViewController包含一个SCNView。我可以转到我的GameViewController,但是当我的玩家死亡时,我试图转向我的GameOverVC,但它不会消失。我知道正在调用代码,因为我在控制台上打印了一些内容。 segue在故事板中设置。
我打电话给
self.performSegue(withIdentifier: "gameOver", sender: self)
我已在多个应用中完成此操作,但我无法弄清楚为什么这不起作用。这是我第一个使用SceneKit的应用程序,所以我不知道这是否有任何改变,但任何帮助都表示赞赏!
同时
如果我尝试
let vc = self.view.window?.rootViewController
vc?.present(GameOverVC(), animated: true, completion: nil)
然后它确实呈现了UIViewController,但它没有显示我在该视图中添加的任何内容?
答案 0 :(得分:1)
segue
适用于UIVIewControllers
,不适用于SpriteKit scenes
。所以,你需要从parent viewcontroller
执行segue,所以你可以做类似的事情,
self.parentViewController.performSegue(withIdentifier: "gameOver", sender: self)
或者如@ZeMoon in this answer所述,您可以在viewcontroller
课程中设置SKScene
的属性,并且可以对此属性执行segue,例如,
class GameScene: SKScene {
var viewController: UIViewController?
...
}
然后,在viewController类中,就在skView.presentScene(scene)
之前,
scene.viewController = self
现在你可以执行segue了,
self.viewController.performSegueWithIdentifier("gameOver", sender: self.viewController)
OR
忘记segue
只是实例化你的GameOverVC
并将其推送到导航控制器上,例如,
let nav = self.view.window?.rootViewController as! UINavigationController
nav.pushViewController(gameOverVC, animated: true)
或者
self.navigationController?.pushViewController(gameOverVC, animated: true)
答案 1 :(得分:0)
您可以尝试以下操作: -
UIViewController *vc = self.view.window.rootViewController;
[vc performSegueWithIdentifier:@"id" sender:nil];