25

如何在 iOS 6.0 中使用以下方法来支持界面定向:

shouldAutorotate

supportedInterfaceOrientations

preferredInterfaceOrientationForPresentation

由于“shouldAutorotateToInterfaceOrientation”在 iOS 6.0 中已弃用。

请提供代码片段以支持您的答案。

谢谢。

4

5 回答 5

19

iOS 5 中不推荐使用的方法:

// Override to allow orientations other than the default portrait orientation.
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
{
    // Return YES for supported orientations
    return (interfaceOrientation == UIInterfaceOrientationLandscapeRight);
}

iOS 6 中的替换和上述已弃用的 iOS 5 方法的等效项:

- (BOOL) shouldAutorotate
{
    return YES;
}

-(NSUInteger)supportedInterfaceOrientations
{
    return UIInterfaceOrientationMaskLandscapeRight;
}

希望这可以帮助。


[编辑#1:添加了我的 UIViewController,它在 iPhone 6.0 模拟器上的 XCode 4.5 中以纵向模式成功启动]

#import "FirstViewController.h"

@interface FirstViewController ()

@end

@implementation FirstViewController

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];

    if (self)
    {
        // Custom initialization
    }

    return self;
}

- (void)viewDidLoad
{
    [super viewDidLoad];
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
}

-(BOOL)shouldAutorotate
{
    return NO;
}

-(NSUInteger)supportedInterfaceOrientations
{
    return UIInterfaceOrientationMaskAll;
}

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
{
    return UIInterfaceOrientationMaskPortrait;
}

[#edit 2:来自支持 iOS 5 和 iOS 6 的仅限横向应用程序的示例代码]

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {

    return (interfaceOrientation == UIInterfaceOrientationLandscapeRight) || (interfaceOrientation == UIInterfaceOrientationLandscapeLeft);
}

- (BOOL)shouldAutorotate {

    return YES;
}

- (NSUInteger)supportedInterfaceOrientations {

    return UIInterfaceOrientationMaskLandscape;
}

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation {

    return UIInterfaceOrientationLandscapeLeft;
}
于 2012-09-19T12:07:17.447 回答
11

顺便说一句,您的 Xcode 项目设置现在优先。确保在项目设置中正确设置“支持的界面方向”数组。这对我来说是个问题。删除了不需要的,我的应用程序就像我用 Xcode 4.4.1 编译时一样工作

于 2012-09-13T23:54:42.717 回答
7

我的应用程序有一个自定义 UINavigationController 子类的实例,它显示了几个视图控制器,全部都是纵向的,除非在播放视频时,在这种情况下,我想另外允许两个横向方向。

根据@uerceg 的回答,这是我的代码。

首先,我在 Xcode -> Target -> Summary 中启用了 Portrait、Landscape Left 和 Landscape right。

在 UINavigationController 子类的实现中,我#import编辑 了<MediaPlayer/MediaPlayer.h>.

然后我实现了这些方法:

// Autorotation (iOS <= 5.x)

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    if ([self modalViewController] && [[self modalViewController] isKindOfClass:[MPMoviePlayerController class]]) {

        // Playing Video: Anything but 'Portrait (Upside down)' is OK
        return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);
    }
    else{
        // NOT Playing Video: Only 'Portrait' is OK
        return (interfaceOrientation == UIInterfaceOrientationPortrait);
    }
}


// Autorotation (iOS >= 6.0)

- (BOOL) shouldAutorotate
{
    return YES;
}


-(NSUInteger)supportedInterfaceOrientations
{
    NSUInteger orientations = UIInterfaceOrientationMaskPortrait;

    if ([self modalViewController] && [[self modalViewController] isKindOfClass:[MPMoviePlayerController class]]) {

        // Playing Video, additionally allow both landscape orientations:

        orientations |= UIInterfaceOrientationMaskLandscapeLeft;
        orientations |= UIInterfaceOrientationMaskLandscapeRight;

    }

    return orientations;
}
于 2012-10-04T09:17:57.067 回答
2

NicolasMiari 的代码对我有用。有点不同的旋转我有一个呈现 UINavigationControllers 的 UITabBarController,我正在使用 StoryBoards。UITabBarController 的子类实现完全一样,请耐心等待 Story Boards 中 Tab Bar Controller 的 Class 选择。即使在构建之后也不能立即使用。

于 2012-10-09T01:46:16.763 回答
1

https://devforums.apple.com/thread/165384?tstart=0

https://devforums.apple.com/thread/166544?tstart=0

上述线程中有许多示例和建议与支持 iOS6 上的界面方向更改有关,这两个线程与游戏中心视图问题有关,但应该足以让您入门。

您还应该查看 UIKit 下的 iOS6 发行说明,不幸的是,由于我是新手,因此无法直接给您链接。

由于保密协议,避免在此处发布代码

希望有帮助

于 2012-09-13T13:32:28.380 回答