我不知道是因为模拟器还是新的XCode而发生这种情况,但我读到有一个解决方案。解决方案是使用viewWillLayoutSubviews来创建场景而不是viewDidLoad。
所以我试过了,但那不起作用。在横向模式下,iPad返回的尺寸始终为768x1024而不是1024x768。早些时候,在XCode 5中,viewWillLayoutSubviews就是这样做的。但现在在XCode 6中,我无法获得这种行为。我在7.1模拟器上遇到了这个问题。 8.0模拟器很好,并正确显示尺寸。
这是我的GameSceneViewController。
@implementation GameViewController
- (void)viewWillLayoutSubviews
{
[super viewWillLayoutSubviews];
SKView * skView = (SKView *)self.view;
skView.showsFPS = YES;
skView.showsNodeCount = YES;
skView.showsDrawCount = YES;
skView.showsPhysics = NO;
if(!skView.scene){
// Create and configure the scene.
GameScene * scene = [GameScene sceneWithSize:skView.bounds.size];
scene.scaleMode = SKSceneScaleModeAspectFill;
// Present the scene.
[skView presentScene:scene];
}
}
- (BOOL)shouldAutorotate{return YES;}
- (NSUInteger)supportedInterfaceOrientations{return UIInterfaceOrientationMaskLandscape;}
- (void)didReceiveMemoryWarning{[super didReceiveMemoryWarning];}
- (BOOL)prefersStatusBarHidden {return YES;}
@end
在支持的界面方向的 info.plist 文件中有两个项目:UIInterfaceOrientationLandscapeRight
和UIInterfaceOrientationLandscapeLeft
如何在iPad横向模式下获得正确尺寸的宽度和高度?
答案 0 :(得分:2)
无论设备方向如何,屏幕尺寸始终相同。密钥窗口大小相同。视图控制器是在窗口内旋转的视图控制器。因此,如果要将视图直接添加到窗口中,或者只是将其添加到根视图控制器(您将具有正确的大小),则可以旋转视图。
例如:
UIWindow* keyWindow = [UIApplication sharedApplication].keyWindow;
UIViewController* rootController = keyWindow.rootViewController;
CGSize screenSize = [UIScreen mainScreen].bounds.size;
CGSize windowSize = keyWindow.bounds.size;
CGSize rootControllerSize = rootController.view.frame.size;
CGSize rootControllerBoundsSize = rootController.view.bounds.size;
CGAffineTransform rootTransform = rootController.view.transform;
NSLog(@"Screen size: %@", NSStringFromCGSize(screenSize));
NSLog(@"Window size: %@", NSStringFromCGSize(windowSize));
NSLog(@"RootController frame size: %@", NSStringFromCGSize(rootControllerSize));
NSLog(@"RootController bounds size: %@", NSStringFromCGSize(rootControllerBoundsSize));
NSLog(@"RootController transform: %@", NSStringFromCGAffineTransform(rootTransform));
如果在横向执行将打印以下内容:
Screen size: {768, 1024}
Window size: {768, 1024}
RootController frame size: {768, 1024}
RootController bounds size: {1024, 768}
RootController transform: [0, 1, -1, 0, 0, 0]
此处的关键是旋转设备时应用于根UIViewController
的转换。
要获得考虑设备旋转的屏幕大小,您可以使用根控制器边界大小。