The shouldAutorotateToInterfaceOrientation: method of UIViewController is deprecated. In its place, you should use the supportedInterfaceOrientations and shouldAutorotate methods.
iOS6 has three new method to handle orientation
// what we support
- (NSUInteger)supportedInterfaceOrientations
{
return UIInterfaceOrientationMaskAllButUpsideDown;
}
// should autorotate or not
- (BOOL) shouldAutorotate
{
return YES;
}
//initial orientation we want to have
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
{
return UIInterfaceOrientationPortrait;
}
But where should we write those methods?If you try to make the MasterViewController only has Portrait Orientation and the DetailViewController has Portrait Orientation and Landscape Orientation.
I find some tutorial,but It has a bug.
The bug is when your DetailViewController on Landscape Orientation press back button to MasterViewController will show Landscape Orientation.
Here's my solution.
You need to create a class that has a subclass of UINavigationController and set supportedInterfaceOrientations and shouldAutorotate in that class.
First,set this in your subclass of UINavigationController
- (NSUInteger)supportedInterfaceOrientations
{
return [[self topViewController] supportedInterfaceOrientations];
}
- (BOOL)shouldAutorotate
{
return YES;
}
set this on MasterViewController- (NSUInteger)supportedInterfaceOrientations
{
return UIInterfaceOrientationMaskPortrait;
}
set this on DetailViewController- (NSUInteger)supportedInterfaceOrientations
{
return UIInterfaceOrientationMaskAllButUpsideDown;
}
Another way - It doesn't need to subclass of UINavigationController
Add a Category to UINavigationController
@implementation UINavigationController (Rotation_IOS6)
-(BOOL)shouldAutorotate
{
return [[self.viewControllers lastObject] shouldAutorotate];
}
-(NSUInteger)supportedInterfaceOrientations
{
return [[self.viewControllers lastObject] supportedInterfaceOrientations];
}
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
{
return [[self.viewControllers lastObject] preferredInterfaceOrientationForPresentation];
}
@end
Another way - Compatible with the iOS4,5 code
Swap Method Implementations
I tried all methods and none of them worked - my adview rotates to whatever direction it wants and it messes my application view when I come back... iOS 6 is useless piece of crap.
ReplyDeleteThose methods work for me,but I also found some orientation bug in iOS 6. I will upload sample file later.
DeleteThis sample file uses "Add a Category to UINavigationController" way.
Deletehttps://www.box.com/s/00f1xh44379vvib8nyh2
i need this method for tabbar controller app.sample code
ReplyDelete