在IOS 6.0接口方向(Interface orientation in iOS 6.0)

2019-06-18 03:58发布

如何使用下面的方法来支持接口方位的iOS 6.0:

shouldAutorotate

supportedInterfaceOrientations

preferredInterfaceOrientationForPresentation

作为“shouldAutorotateToInterfaceOrientation”中的iOS 6.0已经过时了。

请提供代码段来支持你的答案。

谢谢。

Answer 1:

在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其成功启动在人像模式中的XCode 4.5 iPhone 6.0模拟器]

#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;
}


Answer 2:

顺便说一句,你对你的Xcode项目设置设置,现在优先。 请确保您在项目的设置正确设置“支持的接口方向”阵列。 这对我来说这个问题。 删除不需要的那些和我的应用程序的工作就像它没有当我在Xcode 4.4.1编译



Answer 3:

我的应用程序有一个自定义的UINavigationController子类,只存在几个视图控制器,所有的肖像,播放视频,在这种情况下,我想还允许两个横向放置时除外的一个实例。

基于@uerceg的答案,这是我的代码。

首先,我启用了人像,风景左,右景观在Xcode - >目标 - >摘要。

在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;
}


Answer 4:

NicolasMiari的代码为我工作。 有一点不同的自旋我有提出UINavigationControllers一个的UITabBarController,我用故事板。 该的UITabBarController的子类的实现是完全一样的,并耐心等待与选择类的标签栏控制器在故事板。 它甚至建成后不是立即可用。



Answer 5:

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

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

有许多的关于支持iOS6上的接口方向改变上述线程的例子和建议,涉及到的问题与游戏中心欣赏到两个线程,但应该足以让你开始。

您也应该检查iOS6的发布说明的UIKit下,不幸的是我不能给你一个直接的联系,因为我是新的。

这里避免邮政代码由于NDA

希望帮助



文章来源: Interface orientation in iOS 6.0