所以,这就是问题所在。我对 iOS 编程比较陌生,并且我已经承担了一个巨大的项目。
我正在开发一个具有多个级别的游戏,这些级别基本上遵循相同的模式,但具有不同的精灵图像和值,我只是为了速度而决定在 IB 中布置所有级别(不一定是最佳实践,我知道,但是和我一起工作)。每个“关卡”都有自己的视图控制器,类似于“FireLevel1ViewController”、“FireLevel2ViewController”等。所有这些视图控制器都继承自我创建的名为“GameController”的 UIViewController 的自定义子类。
我的问题是,当我在测试设备上打开每个关卡时,GameController 的 viewDidLoad 会在我的子类控制器的 init 或 viewDidLoad 方法之前被调用,因此我的关卡图像/值都没有分配给超类属性。具体来说,我有一个应该在关卡开始时隐藏的暂停菜单(我在 GameController 的 viewDidLoad 中执行 setHidden),但由于 GameController 的 viewDidLoad 在 FireLevel1 有机会将正确的 IB 属性与 PauseMenu 相关联之前运行,因此 GameController 只是隐藏一个空视图,实际的 PauseMenu 永远不会被隐藏。
我可能在这里遇到了多个问题,但大多数情况下我认为我并没有真正理解如何对 UIViewController 的子类进行子类化,以及如何让第二个子类的属性/值/图像在第一个子类的方法中工作。
非常感谢您的帮助!我希望这个问题是有道理的......
游戏控制器代码:
@implementation GameController
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self)
{
// Custom initialization
}
return self;
}
- (void)viewDidLoad
{
[super viewDidLoad];
[self.view addSubview:pauseMenu];
[pauseMenu addSubview:helpMenu];
//Hides the pause and help menus until their respective buttons are pressed
[pauseMenu setHidden:YES];
[helpMenu setHidden:YES];
isPaused = NO;
}
FireLevel1Controller 的代码:
-(id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if(self)
{
theMainview = mainview;
theScene = scene;
theBG = bg;
theHudView = hud;
thePauseView = pauseMenu;
theHelpView = helpMenu;
}
return self;
}
-(void)viewDidLoad
{
[super viewDidLoad];
firstTurret = [[StationaryEnemy alloc]init:turretImage1 baseView:base1];
secondTurret = [[StationaryEnemy alloc]init:turretImage2 baseView:base2];
NSLog(@"I'm in view did load");
}