不能自动在iOS 6的旋转(Can't auto rotate in iOS 6)

2019-08-20 05:38发布

在一个应用程序,我保持我有一个在纵向和portraitupsidedown模式应该发生的一个旋转。 (所有的旋转是在总结面板中启用。)

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

要么

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

不管是什么我想我不能让旋转到accure我的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的弃用,但我仍然不能得到它的工作。

我即将失去它

Answer 1:

从苹果的iOS 6 SDK版本说明:

自转是在IOS 6改变在iOS 6中,所述shouldAutorotateToInterfaceOrientation:的方法UIViewController已弃用。 在其位,你应该使用supportedInterfaceOrientationsForWindow:shouldAutorotate方法。

更多的责任正在向应用程序和应用程序的委托。 现在,iOS的容器(如UINavigationController )不咨询自己的孩子,以确定他们是否应该自动旋转。 默认情况下,应用程序和视图控制器支持的接口方向设置为UIInterfaceOrientationMaskAll为iPad成语和UIInterfaceOrientationMaskAllButUpsideDown为iPhone成语。

视图控制器支持的接口方向可以随着时间的推移,甚至是应用程序的支持的接口方向可以随时间变化而变化。 系统要求输入其支持的接口方向最上面的全屏幕视图控制器(典型根视图控制器)每当设备旋转或每当一个视图控制器呈现全屏幕模式呈现样式。 此外,支撑取向检索仅当此视图控制器返回YES从其shouldAutorotate方法。 该系统相交视图控制器的符合该应用的支撑取向支撑取向(如由Info.plist文件或应用程序委托的测定application:supportedInterfaceOrientationsForWindow:方法)来确定是否旋转。

该系统确定的方位是否是由交叉的由应用的supportedInterfaceOrientationsForWindow返回的值的支持:与由最上面的全屏幕控制器的supportedInterfaceOrientations方法返回的值的方法。 该setStatusBarOrientation:动画:方法不彻底弃用。 现在它只有在最顶端的全屏视图控制器的supportedInterfaceOrientations方法返回0。这使负责确保状态栏的方向是一致的调用者。

对于兼容性,查看仍然实现控制器shouldAutorotateToInterfaceOrientation:方法没有得到新的自转行为。 (换句话说,他们不回落到使用的应用程序,应用程序的委托,或者Info.plist文件来确定支持的方向。)相反, shouldAutorotateToInterfaceOrientation:使用方法合成,将被返回的信息supportedInterfaceOrientations方法。

如果你希望你的整个应用程序进行旋转,那么你应该设置你的Info.plist支持所有的方向。 现在,如果你想有一个特定的视图变为纵向只有你将不得不做一些子类和覆盖自转方法只返回肖像。 只要看看如何在iOS 6中迫使一个UIViewController为纵向



Answer 2:

我从IOS 5.目标应用我用于IOS 5设备shouldAutorotateToInterfaceOrientation方法(默认)。 和类别的UINavigationController(用在我的应用程序在所有定制为UR明智的。)来处理方向的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


Answer 3:

检查您的目标属性...看起来像下面



Answer 4:

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


文章来源: Can't auto rotate in iOS 6