我正在尝试在iPhone上创建游戏,但是我正在尝试一些(我希望)简单而又令人困惑的问题。
我强制我的应用程序处于UIInterfaceOrientationLandscapeRight模式,这是在.plist中设置的,我的每个UIViewControllers都将此作为shouldAutorotateToInterfaceOrientation的唯一可行方向返回
这有效......有时候。我的每个xib都设计为横向模式,所有ViewControllers都以非常相似的方式设置。这是我的问题:
我以编程方式实例化所有的UIViewControllers,例如:
splashScreen = [[SplashScreenController alloc] initWithNibName:@"SplashScreenView" bundle:[NSBundle mainBundle]];
splashScreen.view.frame = CGRectMake(0, 0, [[GameConsts defaultGameConsts] screenWidth], [[GameConsts defaultGameConsts] screenHeight]);
[[self view] addSubview: [splashScreen view]];
mainMenu = [[MainMenuController alloc] initWithNibName:@“MainMenuView”bundle:[NSBundle mainBundle]]; mainMenu.view.frame = CGRectMake(0,0,[[GameConsts defaultGameConsts] screenWidth],[[GameConsts defaultGameConsts] screenHeight]); [[self view] addSubview:[mainMenu view]];
这很好用,但是当我激活我的“游戏视图”,即游戏内菜单和实际游戏区域时,我需要反转screenWidth和screenHeight参数以使它们正确显示。我不明白为什么会这样,我还没有弄清楚。以下是它们的实例化方法:
- (void) setupGameViews
{
// Why do these need to be reversed to show up properly? (Height and Width!)
gameView = [[GameController alloc] initWithNibName:@"GameView" bundle:[NSBundle mainBundle]];
gameView.view.frame = CGRectMake(0, 0, [[GameConsts defaultGameConsts] screenHeight], [[GameConsts defaultGameConsts] screenWidth]);
[[self view] addSubview: [gameView view]];
gameMenu = [[GameMenuController alloc] initWithNibName:@"GameMenuView" bundle:[NSBundle mainBundle]];
gameMenu.view.frame = CGRectMake(0, 0, [[GameConsts defaultGameConsts] screenHeight], [[GameConsts defaultGameConsts] screenWidth]);
[[self view] addSubview: [gameMenu view]];
}
(注意:单击开始游戏按钮时会调用此方法。这都在“父”UIViewController内部,它没有与之关联的视图,而是包含并设置所有这些子视图。也许有他们的架构存在问题?我已经看到了一些类似的例子,所以我决定使用它。)
为了完整性,这里是GameConsts单例在其init方法中的定义:
- (id) init
{
screenWidth = [[UIScreen mainScreen] applicationFrame].size.width;
screenHeight = [[UIScreen mainScreen] applicationFrame].size.height;
screenCenter = CGPointMake(screenSizeHeight / 2, screenSizeWidth / 2);
return [super init];
}
screenWidth和screenHeight是浮点数。 screenCenter是一个CGPoint。如果你注意到,我已经在screenCenter CGPoint中反转了高度/宽度,否则当我尝试在屏幕中心绘制一个对象时,它会显示在屏幕的左下角。
这让我发疯,让我远离这次体验中更有趣的部分。如果有人能提供帮助,那就太棒了。如果需要更多信息,请告诉我。
答案 0 :(得分:2)
我认为applicationFrame
总是返回纵向方向的框架。