SKScene iPad的高度宽度颠倒了

时间:2013-10-14 05:24:05

标签: ios sprite-kit

我正在尝试用仅支持横向模式的iPad应用程序填充我的SKScene瓷砖。在场景中,我发现了h&如此:

int h = [UIScreen mainScreen].bounds.size.height;
int w = [UIScreen mainScreen].bounds.size.width;

不幸的是,发回的尺寸与他们需要的尺寸相反。在视图控制器或视图的内容中讨论此问题有很多主题,解决方案似乎是在viewWillAppear中检测屏幕大小,而不是在viewDidLoad中。但是,这似乎不是SKScenes的有效解决方案。

有什么建议吗?

2 个答案:

答案 0 :(得分:12)

尝试,不要使用viewDidLoad并使用此

- (void)viewWillLayoutSubviews
{
    [super viewWillLayoutSubviews];

    SKView * skView = (SKView *)self.view;
    if (!skView.scene) {
        skView.showsFPS = YES;
        skView.showsNodeCount = YES;

        SKScene * scene = [MyScene sceneWithSize:skView.bounds.size];
        scene.scaleMode = SKSceneScaleModeAspectFill;

        // Present the scene.
        [skView presentScene:scene];
    }
}

答案 1 :(得分:10)

在布局处理程序中初始化场景没有意义。 调整布局处理程序中的场景。 (这就是它的用途。)

@implementation SGOMyScene
{
    SKScene *scene;
}

- (void)viewDidLoad
{
    [super viewDidLoad];

    SKView *skView = (SKView *)self.view;
    skView.showsFPS = YES;
    skView.showsNodeCount = YES;

    scene = [SGOMyScene sceneWithSize:skView.bounds.size];
    scene.scaleMode = SKSceneScaleModeAspectFill;

    [skView presentScene:scene];
}

- (void)viewWillLayoutSubviews
{
    [super viewWillLayoutSubviews];

    SKView *skView = (SKView *)self.view;
    scene.size = skView.bounds.size;
}

您的场景应该实施- (void)didChangeSize:(CGSize)oldSize以将所有内容移动到正确的位置。

万岁,现在你的游戏也处理设备轮换。