I have searched for a solution how to implement a ViewController that supports only LandscaleLeft and LandscapeRight mode. Most solutions I found on stackoverflow and other forums using a setOrientationMode selector on the device object:
NSNumber *value = [NSNumber numberWithInt:
UIInterfaceOrientationLandscapeLeft];
[[UIDevice currentDevice] setValue:value
forKey:@"orientation"];
this could probably work for you, but it uses a non official selector. You may think of this: it is impossible for the program to actually physically turn around your device, but that is what your code would look like.
I finally ended up with a solution that does rotate the interface instead of the device. The following code is a working ViewController that does the trick by calling [UIViewController attemptRotationToDeviceOrientation].
/////////////////////////////////////
/// VIEW CONTROLLER CODE
@interface StartViewController : UIViewController
-(id) initWithWindow:(UIWindow *)window;
@property (nonatomic, retain) UIWindow * window_;
@end // @interface StartViewController
@implementation StartViewController
-(void)dealloc
{
//cleanup code
self.window_ = nil;
[super dealloc];
}
- (BOOL)shouldAutorotateToInterfaceOrientation:
(UIInterfaceOrientation) interfaceOrientation
{
return YES;
}
-(void)viewDidAppear:(BOOL)animated
{
[UIViewController attemptRotationToDeviceOrientation];
[super viewDidAppear:animated];
}
-(void)viewWillAppear:(BOOL)animated
{
}
- (BOOL)shouldAutorotate
{
return YES;
}
- (NSUInteger)supportedInterfaceOrientations
{
return UIInterfaceOrientationMaskLandscapeLeft |
UIInterfaceOrientationMaskLandscapeRight;
}
-(id) initWithWindow:(UIWindow *) window
{
[super init];
self.window_ = window;
return self;
}
@end // implementation StartViewController
/////////////////////////////////////
/////////////////////////////////////
/// APPLICATION CODE:
- (void)applicationDidFinishLaunching:(UIApplication*)application
{
UIWindow * window = [[[UIWindow alloc] initWithFrame:
[[UIScreen mainScreen] bounds]] autorelease];
window.rootViewController = [[[StartViewController alloc]
initWithWindow:window] autorelease];
[window makeKeyAndVisible];
[[UIDevice currentDevice]
beginGeneratingDeviceOrientationNotifications];
}
/////////////////////////////////////