0

在我维护的应用程序中,应该在纵向和纵向倒置模式下发生旋转。(所有旋转都在摘要面板中启用。)

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

或者

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

无论我尝试了什么,我都无法让我的 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

4 回答 4

2

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

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

更多的责任正在转移到应用程序和应用程序委托身上。现在,iOS 容器(例如UINavigationController)不会咨询它们的子容器来确定它们是否应该自动旋转。默认情况下,应用程序和视图控制器支持的界面方向设置UIInterfaceOrientationMaskAll为 iPad 惯用语和UIInterfaceOrientationMaskAllButUpsideDowniPhone 惯用语。

视图控制器支持的界面方向会随着时间而改变——甚至应用程序支持的界面方向也会随着时间而改变。每当设备旋转或视图控制器以全屏模式呈现样式呈现时,系统都会向最顶层的全屏视图控制器(通常是根视图控制器)询问其支持的界面方向。此外,仅当此视图控制器YES从其shouldAutorotate方法返回时才检索支持的方向。系统将视图控制器支持的方向与应用支持的方向(由 Info.plist 文件或应用代理的application:supportedInterfaceOrientationsForWindow:方法确定)相交以确定是否旋转。

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

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

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

于 2013-04-08T05:55:02.103 回答
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
于 2013-04-08T06:05:34.887 回答
0

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

在此处输入图像描述

于 2013-04-09T09:06:28.283 回答
0
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation{
    return YES;
}
于 2015-01-13T09:20:36.830 回答