Подтвердить что ты не робот

Ориентация интерфейса в iOS 6.0

Как использовать следующие методы для поддержки ориентации интерфейса в iOS 6.0:

shouldAutorotate

supportedInterfaceOrientations

preferredInterfaceOrientationForPresentation

Как "shouldAutorotateToInterfaceOrientation" устарел в iOS 6.0.

Просьба предоставить фрагменты кода для поддержки ваших ответов.

Спасибо.

4b9b3361

Ответ 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;
}

Надеюсь, что это поможет.


[edit # 1: Добавлен мой UIViewController, который успешно запускается в портретном режиме в XCode 4.5 на iPhone 6.0 Simulator]

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

Ответ 2

Кстати, ваши настройки в настройках проекта Xcode теперь имеют приоритет. Убедитесь, что вы правильно настроили массив "Поддерживаемые интерфейсы" в настройках вашего проекта. Это была проблема для меня. Удалены нежелательные, и мое приложение работало так же, как и при компиляции с Xcode 4.4.1

Ответ 3

У моего приложения есть экземпляр пользовательского подкласса UINavigationController, в котором представлены несколько контроллеров представлений, все только в портрете, кроме случаев, когда воспроизводится видео, и в этом случае я хочу дополнительно разрешить обе ориентации ландшафта.

Основываясь на ответе @uerceg, это мой код.

Сначала я включил Portrait, Landscape Left и Landscape справа в Xcode → Target → Summary.

В реализации подкласса UINavigationController я #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;
}

Ответ 4

Код Николаса Мириа работал у меня. Немного по-другому, у меня был UITabBarController, который представил UINavigationControllers, и я использовал StoryBoards. Реализация подкласса UITabBarController точно такая же и терпеливы с выбором класса для контроллера панели вкладок в Story Boards. Он не сразу доступен даже после строительства.

Ответ 5

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

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

В приведенных выше разделах содержится ряд примеров и предложений, связанных с поддержкой изменений ориентации интерфейса на iOS6, причем два потока связаны с проблемами с просмотром игрового центра, но их должно быть достаточно, чтобы вы начали.

Вы также должны проверить заметки о выпуске iOS6 в UIKit, к сожалению, я не могу дать вам прямую ссылку, так как я новичок.

Избегайте отправки кода регистрации из-за NDA

Надеюсь, что поможет