1

我有一个带有单独 UIViewControllers 和 xibs 的多视图应用程序。我有一个视图是游戏视图,每次我调用它时我都希望它重新初始化,我的意思是在它的初始条件下重新启动,而不是在我上次离开它的状态。

这是我用来加载和删除视图的代码块:

-(void)loadStartViewController {
[currentView.view removeFromSuperview];
StartViewController *startViewController = [[StartViewController alloc] initWithNibName:@"StartView" bundle:nil];
[window addSubview:startViewController.view];
currentView = startViewController;

}

我应该在这里更清楚。在玩游戏时,我有一个 UIViewController 和一个 xib 组成视图。他们调用 UIView 中的方法以编程方式绘制视图。游戏结束时我离开 UIViewController 并进入得分屏幕。我想让用户重新启动并重新进入游戏,IE 用上面的代码加载 UIViewController 但从一个新游戏开始,所有设置都在调用的方法中。我可以设置一个变量并在 UIViewControllers 之间传递它,但我可能有一个命令可以让我重置游戏 UIViewController 所以它不记得任何关于上一场比赛结束时的状态。

为了让它工作,我编写了一个方法来重置 UIView 中绘制游戏屏幕的所有变量,并从 viewDidLoad 部分的 UIViewController 调用该方法。

4

2 回答 2

2

我假设您的视图正在显示存储在模型(游戏状态)中的一些数据。那么你不想重置游戏状态并让视图显示它吗?当手机内存不足时需要显示或释放视图时,系统会管理(加载/释放/重新加载)视图。因此,如果您单独处理游戏状态,您应该更新游戏状态(模型)并让视图显示它。

你是什​​么意思我的“调用视图”?您的意思是当您从“菜单”转到“游戏屏幕”时?

也许在显示视图后重新加载游戏状态会有所帮助。有一些像viewDidLoad这样的委托,但我的理解是在加载视图后调用它们。但是,如果您的内存不足,您的视图可能会被释放并稍后重新加载,所以我想您应该在模型对象中自己管理游戏“状态”并让视图显示它。

不知道这是否有帮助,我不太确定你的意思是我的“调用视图”。

于 2009-05-06T23:48:23.070 回答
0

与其跟踪当前显示的视图,不如使用 UINavigationController。这就是他们的目的。在您的应用委托中的 applicationDidFinishLaunching 中:

UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:startViewController];

在 startViewController 中创建一个实例变量,并在创建后将其传递给导航控制器的指针。然后当你想去游戏时:

[self.navigationController pushViewController:gameViewController animated:YES];

或者没有动画,无论如何。您可能还想隐藏导航栏:

[self.navigationController setNavigationBarHidden:YES animated:NO];

游戏结束后,您可以继续推送您想要的任何视图,并且您可以随时返回第一个视图:

[self.navigationController popToRootViewControllerAnimated:YES];

哦,至于每次玩都重新初始化游戏,只需执行

-(void)viewWillAppear:(BOOL)animated{}

在游戏视图控制器中并执行您想要的任何初始化。虽然老实说我不是 100% 确定你应该将它与 .xib 一起使用...我很少使用 Interface Builder 所以我不确定。但我认为它会起作用。

于 2009-05-07T07:01:57.847 回答