无法在iOS 6中自动旋转

时间:2013-04-08 05:40:30

标签: objective-c cocoa-touch cocoa ios6

在一个应用程序中,我保持旋转,应该在纵向和纵向倒置模式下进行。 (在摘要面板中启用所有旋转。)

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    // Return YES for supported orientations
    return interfaceOrientation==UIInterfaceOrientationPortrait || interfaceOrientation==UIInterfaceOrientationPortraitUpsideDown;
}

 - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    return (interfaceOrientation == UIInterfaceOrientationPortrait);
}

无论我尝试什么,我都无法通过旋转来确定i ios 6

到目前为止我尝试过的事情:

-(NSUInteger)supportedInterfaceOrientations{
    return UIInterfaceOrientationMaskPortrait; 
}

-(NSInteger)supportedInterfaceOrientations{
NSInteger mask = 0;
if ([self shouldAutorotateToInterfaceOrientation: UIInterfaceOrientationLandscapeRight])
    mask |= UIInterfaceOrientationMaskLandscapeRight;
if ([self shouldAutorotateToInterfaceOrientation: UIInterfaceOrientationLandscapeLeft])
    mask |= UIInterfaceOrientationMaskLandscapeLeft;
if ([self shouldAutorotateToInterfaceOrientation: UIInterfaceOrientationPortrait])
    mask |= UIInterfaceOrientationMaskPortrait;
if ([self shouldAutorotateToInterfaceOrientation: UIInterfaceOrientationPortraitUpsideDown])
    mask |= UIInterfaceOrientationMaskPortraitUpsideDown;
return mask;
}

我试过把它放在我的appdelegate中:

-(NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window
{
    return UIInterfaceOrientationMaskPortraitUpsideDown;
}

但是我收到了这个错误:由于未捕获的异常'UIApplicationInvalidInterfaceOrientation'而终止应用程序,原因是:'支持的方向与应用程序没有共同的方向,并且shouldAutorotate返回YES'

试着把它放在我的代表中:

- (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window
{
    NSUInteger orientations = UIInterfaceOrientationMaskAll;

    if (self.window.rootViewController) {
        UIViewController* presented = [[(UINavigationController *)self.window.rootViewController viewControllers] lastObject];
        orientations = [presented supportedInterfaceOrientations];
    }
    return orientations; 
}

我阅读了有关它的所有讨论以及对shouldAutorotateToInterfaceOrientation的弃用,但我仍然无法使其工作。

我即将失去它

4 个答案:

答案 0 :(得分:2)

来自Apple的iOS 6 SDK发行说明:

  

iOS 6中的自动旋转正在发生变化。在iOS 6中,不推荐shouldAutorotateToInterfaceOrientation: UIViewController方法。取而代之的是,您应该使用supportedInterfaceOrientationsForWindow:shouldAutorotate方法。

     

更多责任转移到应用和应用代表。现在,iOS容器(例如UINavigationController)不会咨询他们的孩子以确定他们是否应该自动旋转。默认情况下,应用程序和视图控制器支持的界面方向对于iPad惯用语设置为UIInterfaceOrientationMaskAll,对于iPhone惯用语设置为UIInterfaceOrientationMaskAllButUpsideDown

     

视图控制器支持的界面方向可能会随着时间的推移而变化 - 即使应用程序支持的界面方向也会随着时间的推移而变化。无论何时设备旋转或每当视图控制器呈现全屏模态呈现样式时,系统都要求最顶层的全屏视图控制器(通常是根视图控制器)获得其支持的界面方向。此外,仅当此视图控制器从其YES方法返回shouldAutorotate时,才会检索支持的方向。系统将视图控制器支持的方向与应用程序支持的方向(由Info.plist文件或应用程序代理的application:supportedInterfaceOrientationsForWindow:方法确定)相交,以确定是否旋转。

     

系统通过将应用程序的supportedInterfaceOrientationsForWindow:方法返回的值与最顶层全屏控制器的supportedInterfaceOrientations方法返回的值相交来确定是否支持方向。 setStatusBarOrientation:animated:方法不会被完全弃用。现在,只有当最顶层的全屏视图控制器的supportedInterfaceOrientations方法返回0时,它才有效。这使得调用者负责确保状态栏方向一致。

     

为了兼容性,仍然实现shouldAutorotateToInterfaceOrientation:方法的视图控制器不会获得新的自动旋转行为。 (换句话说,他们不会回退到使用app,app delegate或Info.plist文件来确定支持的方向。)相反,shouldAutorotateToInterfaceOrientation:方法用于合成将返回的信息。 supportedInterfaceOrientations方法。

如果您希望整个应用程序旋转,那么您应该设置Info.plist以支持所有方向。现在,如果您希望特定视图仅为纵向,则必须执行某种子类并覆盖自动旋转方法以仅返回纵向。只需查看How to force a UIViewController to Portrait orientation in iOS 6

即可

答案 1 :(得分:1)

我的应用程序是从IOS 5开始的。我使用了IOS 5设备的shouldAutorotateToInterfaceOrientation方法(默认情况下)。和类别UINavigationController(在我的应用程序中全部用于自定义。)来处理IOS 6的方向。

#import "UINavigationController+Rotation_IOS6.h"

    @implementation UINavigationController (Rotation_IOS6)

    -(BOOL)shouldAutorotate
    {

            return YES;
    }

    -(NSUInteger)supportedInterfaceOrientations
    {

        return UIInterfaceOrientationMaskAll;
    }

    - (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
    {
        if([self.visibleViewController isMemberOfClass:NSClassFromString(@"SampleViewController")])
        {
            return UIInterfaceOrientationMaskLandscape | UIInterfaceOrientationMaskPortraitUpsideDown | UIInterfaceOrientationMaskPortrait;
        }
        return UIInterfaceOrientationPortrait;

    }

    @end

答案 2 :(得分:0)

检查目标属性......如下所示

enter image description here

答案 3 :(得分:0)

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation{
    return YES;
}