Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Interface orientation in iOS 6.0

How to use the following methods to support interface orientation in iOS 6.0:

shouldAutorotate

supportedInterfaceOrientations

preferredInterfaceOrientationForPresentation

As "shouldAutorotateToInterfaceOrientation" is deprecated in iOS 6.0.

Please provide code snippets to support your answers.

Thanks.


2 Answers

Deprecated method in iOS 5:

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

Replacement in iOS 6 and equivalent of this deprecated iOS 5 method above:

- (BOOL) shouldAutorotate
{
    return YES;
}

-(NSUInteger)supportedInterfaceOrientations
{
    return UIInterfaceOrientationMaskLandscapeRight;
}

Hope this helps.


[edit #1: Added my UIViewController which successfully starts in Portrait mode in XCode 4.5 on 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: Sample code from landscape only application which supports iOS 5 and iOS 6]

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {

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

- (BOOL)shouldAutorotate {

    return YES;
}

- (NSUInteger)supportedInterfaceOrientations {

    return UIInterfaceOrientationMaskLandscape;
}

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation {

    return UIInterfaceOrientationLandscapeLeft;
}
like image 162
uerceg Avatar answered Sep 13 '25 11:09

uerceg


By the way, your settings on your Xcode project settings now take precedence. Make sure that you set the "Supported interface orientations" array properly in your project's settings. That was the issue for me. Removed the undesired ones and my app worked like it did when I compiled with Xcode 4.4.1

like image 31
James Laurenstin Avatar answered Sep 13 '25 11:09

James Laurenstin