布拉格!
我正在尝试开发一款具有类似塞尔达的品质的游戏。(即,当PC点击屏幕边缘时,屏幕将切换到下一个视图,并且PC的位置在适当的边缘重新开始。)
我遇到的问题是,我不希望每个级别段都有多个视图控制器,因为所有的数据/功能都存在于原始的"LevelView“控制器中。如何在仅切换LevelView文件的同时保留此“NIB”控制器中的代码?(也就是说,我希望在那里出现的类只有AppDelegate、"LevelView“、"ItemView”等。)我不想为游戏中的每个NIB文件重新创建一个视图控制器。
我很感谢你能提供的任何帮助!非常感谢!:D
发布于 2010-09-28 12:34:21
创建一个只包含新视图的NIB文件。将NIB文件中文件所有者的类更改为LevelView控制器的类。当您想要加载一个新的NIB文件时,从LevelView控制器调用以下代码:
NSArray *topLevelObjects = [[[NSBundle mainBundle] loadNibNamed:@"Put your nib file name here" owner:self options:nil];
UIView *newLevelView = [[topLevelObjects objectAtIndex:0] retain];这是在做什么?当您调用loadNibNamed时,它会向您返回一个由NIB文件中的顶级对象组成的数组。"File's Owner“和"First Responder”代理对象不算顶级对象。因此,您将在NIB文件中获得一个仅包含顶级视图的数组。您传递self作为文件的所有者,以便在顶层视图的子视图和界面构建器中的"File's Owner“之间建立的任何出口连接都可以连接起来。
如果将顶级视图连接到视图控制器中的插座,则不需要对返回的数组loadNibNamed执行任何操作。只要忽略它,它就会自动释放(它会返回给你,保留计数为0)。
现在,我认为这样做不是一个好主意。我认为有更好的方法来设计你的应用程序。例如,创建描述级别的数据文件(例如属性列表或XML文件)可能比将所有级别放入NIB文件中更有意义。但是,如果你真的想这样做,上面的东西应该会让你开始。
发布于 2011-01-03 16:58:17
使用NSUserDefaults并从那里获取它。
https://stackoverflow.com/questions/3809351
复制相似问题