[ios]目前 ViewController 与场景

标签: sprite-kit ios Swift
发布时间: 2017/4/3 21:14:20
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我有游戏菜单的按钮开始游戏︰

@IBAction func startGame(_ sender: AnyObject) {
        if let vc = self.storyboard?.instantiateViewController(withIdentifier: "gameViewController") as? GameViewController {
            vc.modalTransitionStyle = .crossDissolve
            self.present(vc, animated: true, completion: nil)
        }
    }

游戏结束的代码︰

if lifes == 0 {
    if let vc = self.storyboard?.instantiateViewController(withIdentifier: "mainMenuViewController") as? MainMenuViewController {
        vc.modalTransitionStyle = .crossDissolve
        self.present(vc, animated: true, completion: nil)
    }
}

当用户点击按钮时我显示新视图控制器与Sprite工具包场景。但当游戏是超过我回到菜单。,如果我们再次单击开始游戏,fps 的 (在我的案例) 60 降为 30,然后如果再到 20 等。看起来像旧视图控制器仍在工作。如何解雇它?

我读过类似的问题,但没有在他们找到答案。

解决方法 1:

好了,现在您的问题是清楚的。

你不应该提出一个新 MainViewController 时候,游戏结束。这将导致你的视图控制器这样的潜在的无限堆栈︰ 主-游戏-主要-游戏 > 网站->...... 相反你应该解雇你游戏的 vc 和返回到先前的控制器,所以,你总是会在内存中有一个或两个控制器。

所以你应该取代这︰

if lifes == 0 {
    if let vc = self.storyboard?.instantiateViewController(withIdentifier: "mainMenuViewController") as? MainMenuViewController {
        vc.modalTransitionStyle = .crossDissolve
        self.present(vc, animated: true, completion: nil)
    }
}

为此︰

if lifes == 0 {
    dismiss(animated: true, completion: nil) //will bring you to previous Main vc
}

编辑︰

如果你有两个以上的控制器来显示,你应该考虑Navigation Controller方法。基本上你创造它与 rootViewController (MainVC),然后推 GameVC,然后推意识。

在 MainVC:

self.navigationController?.pushViewController(gameVC, animated: true)

在 GameVC:

self.navigationController?.pushViewController(gameOverVC, animated: true)

流行音乐只只有一个控制器︰

self.navigationController?.popViewController(animated: true)

流行音乐的第一个控制器︰

self.navigationController?.popToRootViewController(animated: true)
赞助商