Sprite Kit 游戏:以纵向模式穿越世界,但以横向模式进行战斗?

Sprite Kit game: over world in Portrait mode but battles in Landscape mode?

到目前为止,游戏以纵向加载:所以主菜单是纵向的,然后游戏主世界(玩家角色在其中四处漫游)也是纵向的。但是我需要在角色开始战斗时将方向更改为横向模式(另外,当玩家在战斗模式中转动他们的 phone 时,我不希望 phone 改变方向并不小心将所有内容改回来人像模式或反之亦然)。战斗模式是另一个 SKScene,它在某些触发器上呈现。如何将新呈现的 SKScene 的方向更改为横向?我可以在单个 SKScene 内或仅在视图控制器内执行这些更改吗?这是当前的视图控制器代码,关于方向:

-(BOOL)shouldAutorotate
{
    return YES;
}


-(NSUInteger)supportedInterfaceOrientations
{
    if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone)
    {
        return UIInterfaceOrientationMaskAllButUpsideDown;
    }
    else
    {
        return UIInterfaceOrientationMaskAll;
    }
}

这是战斗 SKScene 中的当前代码 - 我想强制进入横向模式的代码(结果非常丑陋,因为战斗场景以横向加载但视图控制器仍然认为我们处于纵向...另一个问题是,如果我以任何方式旋转我的 phone,方向会自动旋转。我需要固定方向以重新分级 phone 移动):

-(void)didMoveToView:(SKView *)view
{
    NSNumber *value = [NSNumber numberWithInt:UIInterfaceOrientationLandscapeRight];
    [[UIDevice currentDevice] setValue:value forKey:@"orientation"];
}

这是个问题,因为您只能手动更改应用的方向,前提是您的应用设置已允许它。比如你只勾选了竖屏模式,后面想转成横屏模式,就不行了。

要将方向更改为例如向左横向,您可以使用:

[[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationLandscapeLeft  animated:NO];