如何在iOS中返回到前台时更改设备方向?

时间:2016-01-12 09:46:49

标签: ios screen orientation screen-orientation

我已使用以下代码

在子视图控制器中将方向从纵向更改为横向

    NSNumber *value = [NSNumber      numberWithInt:UIInterfaceOrientationLandscapeLeft];
    [[UIDevice currentDevice] setValue:value forKey:@"orientation"];

但是当我转到背景并返回前景时,我按下按钮进入主页然后需要使用以下代码从横向更改方向


    NSNumber *value = [NSNumber      numberWithInt:UIInterfaceOrientationPortrait];

    [[UIDevice currentDevice] setValue:value forKey:@"orientation"];

- (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window
{
    if ([ConfigObjC currentPage] && [[ConfigObjC currentPage] isEqualToString:@"SubViewController"])
    {
        return UIInterfaceOrientationMaskLandscapeLeft;
    }
    else{
        return UIInterfaceOrientationMaskPortrait;
    }
}

但它不起作用。

当我没有去背景时,我成功地将风景从风景变为肖像。我非常感谢如何解决这个问题

1 个答案:

答案 0 :(得分:0)

如果您想将窗户置于横向模式,您可以修改Xcode信息以仅支持横向,例如:

<key>UISupportedInterfaceOrientations</key>
<array>
<string>UIInterfaceOrientationLandscapeLeft</string>
<string>UIInterfaceOrientationLandscapeRight</string>
</array>

编码的另一种方法是更改​​UIWindow的方向,如下所示:

UIApplication *application=[UIApplication sharedApplication];
[application setStatusBarOrientation:UIInterfaceOrientationLandscapeRight];
application.keyWindow.transform=CGAffineTransformMakeRotation(M_PI);

使用上述方法需要将ShouldAutoRotate设置为NO

- (BOOL)shouldAutorotate{
    return NO;
}

此外,如果横向模式中只显示多个视图,您可以使用属性transform来旋转这些视图,如下所示:

//rotate screen only with view
[[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationLandscapeRight];

self.view.transform = CGAffineTransformMakeRotation(M_PI/2);
希望可以帮到你!