gpt4 book ai didi

ios - 使用场景呈现 ViewController

转载 作者:行者123 更新时间:2023-11-28 06:31:41 24 4
gpt4 key购买 nike

我有一个带有按钮开始游戏的游戏菜单:

@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 Kit 场景的新 View Controller 。但是当游戏结束时,我回到菜单。如果我们再次点击 Start game,fps 从 60(在我的例子中)下降到 30,然后再次下降到 20 等等。看起来旧的 View Controller 仍在工作。如何解雇它?

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

最佳答案

好的,现在你的问题很清楚了。

当游戏结束时,你不应该呈现一个新的 MainViewController。这将导致你像这样潜在地无限堆叠 View Controller :主要 -> 游戏 -> 主要 -> 游戏 -> ...相反,您应该关闭您的游戏 vc 并返回到之前的 Controller ,这样您的内存中将始终有一个或两个 Controller 。

所以你应该替换这个:

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
}

编辑:

如果要显示两个以上的 Controller ,则应考虑使用导航 Controller 方法。基本上您使用 rootViewController (MainVC) 创建它,然后推送 GameVC,然后推送 GameOver。

在主VC中:

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

在 GameVC 中:

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

只弹出一个 Controller :

self.navigationController?.popViewController(animated: true)

弹出到第一个 Controller :

self.navigationController?.popToRootViewController(animated: true)

关于ios - 使用场景呈现 ViewController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40148433/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com