【问题标题】:Analogue of Cocos2D replaceScene in UIKitUIKit 中 Cocos2D replaceScene 的类比
【发布时间】:2025-12-27 15:00:17
【问题描述】:

我已经使用 Cocos2D 几个月了。我用:

MyCCScene *sceneToRun = [MyCCScene node];
[[CCDirector sharedDirector] replaceScene:sceneToRun];

这会加载新场景,从内存中清除前一个场景,然后显示新场景。很简单。

问题: UIKit 中是否有类似的东西?

-Modal segues 将旧的 ViewController 保留在内存中,它们的目的不同。

-Push segues 仅在 UINavigationControllers 中工作。

我认为要走的路是实现我自己的 Container ViewController,它按照我想要的方式处理它的子 ViewController 和内存。 http://developer.apple.com/library/ios/#documentation/uikit/reference/UIViewController_Class/Reference/Reference.html#//apple_ref/doc/uid/TP40006926-CH3-SW81

但我不完全确定。没有更直接的方法吗?对于如此简单明了的事情,这看起来有点过头了。

【问题讨论】:

  • 您可能想了解更多有关 Storyboard、视图控制器和 MVC 的一般信息。 UIKit 的工作方式与 cocos2d 不同。您不会在 UIKit 中“替换场景”,而是呈现其他视图控制器。前一个视图控制器是否保持活动状态完全取决于您。
  • 您还可以设计视图控制器以保持活动状态,但在当前未呈现时加载和卸载任何不必要的数据(或收到内存警告时)。

标签: ios uiviewcontroller replace cocos2d-iphone containment


【解决方案1】:

我可能已经找到了一个不错的解决方案。应该使用 UINavigationController,并手动管理其 viewContollers 属性(即 UIViewController 的堆栈)。在新的 UIViewController 加载之后(或之前),您可以从堆栈中删除旧的 UIViewController,从而将其从内存中清除。

这篇文章有帮助: How can I pop a view from a UINavigationController and replace it with another in one operation?

这样你可以创建一个程序流,只有当 UIViewController 一次在内存中,当你需要一个新的 UIViewController 时替换它们。

【讨论】: