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

[#編集 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のサブクラスの実装はまったく同じであり、ストーリーボードのタブバーコントローラーのクラス選択に我慢してください。構築後もすぐには利用できません。

于 2012-10-09T01:46:16.763 に答える
1

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

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

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

また、UIKit の下にある iOS6 のリリース ノートも確認してください。残念ながら、初心者なので直接リンクを提供することはできません。

NDA のため、ここにコードを投稿することは避けてください

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

于 2012-09-13T13:32:28.380 に答える