tcd
tcd

Reputation: 1605

iPhone/iPad App Orientation

The iPhone version of my app supports UIDeviceOrientationPortraitUpsideDown and UIDeviceOrientationPortrait, but the iPad version supports all Orientations.

In my view controller I have this:

-(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation     {
    return YES;
}

and my Info.plist file has this:

enter image description here

The problem is that when I build the app to my iPod, the app won't turn upside down. The iPad will support all Orientations.

I've tried removing the shouldAutorotateToInterfaceOrientation all together and I've tried this code:

-(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    return (interfaceOrientation = UIDeviceOrientationLandscapeLeft) && (interfaceOrientation = UIDeviceOrientationLandscapeRight) && (interfaceOrientation = UIDeviceOrientationPortraitUpsideDown) && (interfaceOrientation = UIDeviceOrientationPortrait);
}

But for some reason, the upside down just won't work! Are there any other solutions for this?

Edit: using Xcode 4.5 iOS6

Upvotes: 2

Views: 3207

Answers (4)

Tony
Tony

Reputation: 664

Another way to support orientations is to subclass UINavigationController and add your orientation code there

i.e

//IOS 5
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation{
    return YES;
}
//IOS 6
- (BOOL)shouldAutorotate {
    return YES;
}
- (NSUInteger)supportedInterfaceOrientations {
    return UIInterfaceOrientationMaskAll;
}

this worked for me, using storyboards

Upvotes: 0

TheTiger
TheTiger

Reputation: 13364

-(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation

This method is deprecated in IOS 6 so instead of it you can use below method.

-(NSUInteger)supportedInterfaceOrientations
{
    return UIInterfaceOrientationMaskAll;
}

return orientation according to you.

Upvotes: 0

tcd
tcd

Reputation: 1605

Figured it out, the iOS6 SDK uses shouldAutorotate so here is my new code:

-(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    return YES;
}

-(BOOL)shouldAutorotate {
     return YES;
}

-(NSUInteger)supportedInterfaceOrientations {
    return UIInterfaceOrientationMaskAll;
}

Upvotes: 3

Zack
Zack

Reputation: 871

If I understand you correctly, you want the iPad to support all orientations while you want the iPhone to support just rotation of upside down and portrait. Try this as a solution. (this is a simpler way then what you are doing above)

   -(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {

    if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) {
          return YES;
     }

    else {
            return UIInterfaceOrientationIsPortrait(interfaceOrientation);
        }
 }

I would also like to add that you MUST ADD THIS INTO EACH SEPARATE VIEW CONTROLLER in order for it to rotate for the other view as well.

For instance, lets say I have viewcontroller_1 and viewcontroller_2, I have to go into both .m files of the controller and add the following code. If you dont, it may not rotate for one of the views.

Upvotes: 0

Related Questions