【问题标题】:Reinitialize a view controller - iPhone重新初始化视图控制器 - iPhone
【发布时间】:2010-10-24 08:30:36
【问题描述】:

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

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

-(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 中调用该方法。

【问题讨论】:

    标签: iphone cocoa-touch memory-management uiviewcontroller


    【解决方案1】:

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

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

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

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

    【讨论】:

      【解决方案2】:

      使用 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 所以我不确定。但我认为它会起作用。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-12-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-09-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多