Note that there are some explanatory texts on larger screens.

plurals
  1. PORestricting an application to a specific orientation on IOS 5
    primarykey
    data
    text
    <p>I have an IOS application developed using Cocos2dx engine.</p> <p>The application is locked for a specific orientation (for example portrait) everything in the application seems to work fine and according to the right orientation except for the recent apps bar and notifications which are according to the device orientation.</p> <p>I want to be able to restrict it so it will have the same orientation as the application itself.</p> <p>I noticed that removing the landscape orientation inside the <code>info.plist</code> file does the job, but I want to be able to do it through code.</p> <p>In IOS 6 I found that all I had to was to override <code>referredInterfaceOrientationForPresentation</code> in my <code>RootViewController</code> and give the right orientation and this does the trick, but this method doesn't work for IOS 5 and below.</p> <p>What do I need to do to make this work on devices with IOS 5 and below?</p> <p>This is the code for the <code>RootViewController</code> (I didn't write it, I just added the last method and I'm trying to figure out how to fix the notifications and recent apps problem)</p> <pre><code>#include "cocos2d.h" #import "RootViewController.h" #import "AppDelegate.h" #import "misc/deviceOrientation.h" #import "services/ios/ConfigurationServiceImpl.h" @implementation RootViewController @synthesize progressView; /* // The designated initializer. Override if you create the controller programmatically and want to perform customization that is not appropriate for viewDidLoad. - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { if ((self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil])) { // Custom initialization } return self; } */ /* // Implement loadView to create a view hierarchy programmatically, without using a nib. - (void)loadView { } */ /* // Implement viewDidLoad to do additional setup after loading the view, typically from a nib. - (void)viewDidLoad { [super viewDidLoad]; } */ -(NSUInteger)supportedInterfaceOrientations{ ConfigurationServiceImpl* configurationService = [ConfigurationServiceImpl instance]; if ([configurationService isLandscape]) return UIInterfaceOrientationMaskLandscape; else return UIInterfaceOrientationMaskPortrait | UIInterfaceOrientationMaskPortraitUpsideDown; } -(BOOL)shouldAutorotate{ return YES; } // Override to allow orientations other than the default portrait orientation. - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { // printf("shouldAutorotateToInterfaceOrientation\n"); // // There are 2 ways to support auto-rotation: // - The OpenGL / cocos2d way // - Faster, but doesn't rotate the UIKit objects // - The ViewController way // - A bit slower, but the UiKit objects are placed in the right place // #if GAME_AUTOROTATION==kGameAutorotationNone // // EAGLView won't be autorotated. // Since this method should return YES in at least 1 orientation, // we return YES only in the Portrait orientation // return ( interfaceOrientation == UIInterfaceOrientationPortrait ); #elif GAME_AUTOROTATION==kGameAutorotationCCDirector // // EAGLView will be rotated by cocos2d // // Sample: Autorotate only in landscape mode // if( interfaceOrientation == UIInterfaceOrientationLandscapeLeft ) { [[CCDirector sharedDirector] setDeviceOrientation: kCCDeviceOrientationLandscapeRight]; } else if( interfaceOrientation == UIInterfaceOrientationLandscapeRight) { [[CCDirector sharedDirector] setDeviceOrientation: kCCDeviceOrientationLandscapeLeft]; } } // Since this method should return YES in at least 1 orientation, // we return YES only in the Portrait orientation return ( interfaceOrientation == UIInterfaceOrientationPortrait ); #elif GAME_AUTOROTATION == kGameAutorotationUIViewController // // EAGLView will be rotated by the UIViewController // // Sample: Autorotate only in landscpe mode // // return YES for the supported orientations ConfigurationServiceImpl* configurationService = [ConfigurationServiceImpl instance]; return [configurationService shouldAutorotateToInterfaceOrientation: interfaceOrientation]; #else #error Unknown value in GAME_AUTOROTATION #endif // GAME_AUTOROTATION // Shold not happen return NO; } //This callback only will be called when GAME_AUTOROTATION == kGameAutorotationUIViewController #if GAME_AUTOROTATION == kGameAutorotationUIViewController -(void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration { if (toInterfaceOrientation == UIInterfaceOrientationLandscapeLeft) CDeviceOrientation::setDeviceOrientation(CDeviceOrientation::left); else if (toInterfaceOrientation == UIInterfaceOrientationLandscapeRight) CDeviceOrientation::setDeviceOrientation(CDeviceOrientation::right); else if (toInterfaceOrientation == UIInterfaceOrientationPortrait) CDeviceOrientation::setDeviceOrientation(CDeviceOrientation::down); else if (toInterfaceOrientation == UIInterfaceOrientationPortraitUpsideDown) CDeviceOrientation::setDeviceOrientation(CDeviceOrientation::up); } #endif // GAME_AUTOROTATION == kGameAutorotationUIViewController - (void)didReceiveMemoryWarning { // Releases the view if it doesn't have a superview. [super didReceiveMemoryWarning]; // Release any cached data, images, etc that aren't in use. } - (void)viewDidUnload { [super viewDidUnload]; // Release any retained subviews of the main view. // e.g. self.myOutlet = nil; } - (void)dealloc { [super dealloc]; } - (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation { ConfigurationServiceImpl* configurationService = [ConfigurationServiceImpl instance]; if ([configurationService isLandscape]) return UIInterfaceOrientationLandscapeRight; else return UIInterfaceOrientationPortrait; } @end </code></pre>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload