web-dev-qa-db-ja.com

iOS 6.0のインターフェイスの向き

次のメソッドを使用して、iOS 6.0でインターフェイスの向きをサポートする方法:

shouldAutorotate

supportedInterfaceOrientations

preferredInterfaceOrientationForPresentation

「shouldAutorotateToInterfaceOrientation」はiOS 6.0で非推奨になりました。

回答をサポートするためにコードスニペットを提供してください。

ありがとう。

25
user1302553

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:iPhone 6.0シミュレーターのXCode 4.5でポートレートモードで正常に起動するUIViewControllerを追加]

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

ところで、Xcodeプロジェクト設定の設定が優先されます。プロジェクトの設定で「サポートされるインターフェイスの向き」配列を適切に設定してください。それが私にとっての問題でした。不要なものを削除し、Xcode 4.4.1でコンパイルしたときと同じようにアプリが機能した

11

私のアプリにはカスタムUINavigationControllerサブクラスのインスタンスがあり、ビデオを再生する場合を除き、すべて縦向きのみのいくつかのView Controllerを表示します。

@uercegの答えに基づいて、これは私のコードです。

最初に、Xcode-> Target-> SummaryでPortrait、Landscape Left、Landscape rightを有効にしました。

UINavigationControllerサブクラスの実装では、I #import 'ed <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;
}
7
Nicolas Miari

NicolasMiariのコードは私のために働いた。少し異なるスピンで、UINavigationControllersを表示するUITabBarControllerがあり、StoryBoardsを使用していました。 UITabBarControllerのサブクラスの実装はまったく同じであり、Story BoardsのTab Bar Controllerのクラス選択に耐えます。ビルド後もすぐには利用できません。

2
user593733

https://devforums.Apple.com/thread/165384?tstart=

https://devforums.Apple.com/thread/166544?tstart=

上記のスレッドには、iOS6でのインターフェイスの向きの変更のサポートに関するいくつかの例と提案があります。2つのスレッドは、ゲームセンタービューの問題に関連していますが、開始するには十分なはずです。

また、UIKitでiOS6リリースノートを確認する必要があります。残念ながら、私は新しいので直接リンクを提供することはできません。

NDAが原因でここにコードを投稿しない

役立つことを願っています

1
Deji