self.interfaceOrientation或[[UIApplication sharedApplication] statusBarOrientation]


  if (self.interfaceOrientation==UIDeviceOrientationLandscapeRight) {


 XXOO


 }
 不旋转,保持竖屏


 //iOS 5
 - (BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation
 {
         return (toInterfaceOrientation == UIInterfaceOrientationPortrait);
 }
 //iOS 6
 - (BOOL)shouldAutorotate
 {
         return NO;
 }
 - (NSUInteger)supportedInterfaceOrientations
 {
         return UIInterfaceOrientationMaskPortrait;
 }
 - (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
 {
         return UIInterfaceOrientationPortrait;
 }
 始终保持横屏


 //iOS 5
 - (BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation
 {
         return (toInterfaceOrientation == self.preferredInterfaceOrientationForPresentation);
 }
 //iOS 6
 - (BOOL) shouldAutorotate
 {
         return YES;
 }
 - (NSUInteger)supportedInterfaceOrientations
 {
         return UIInterfaceOrientationMaskLandscapeRight;
 }
 - (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
 {
         return UIInterfaceOrientationLandscapeRight;
 }
 在使用UINavigationController时发现,无论怎么设置上面方法的返回,都无法控制UINavigationController的旋转,这似乎是iOS的一个bug。但无论如何,以下是stackflow上面的一个解决方法:
  1 @implementation UINavigationController (Rotation_IOS6)
  2 -(BOOL)shouldAutorotate {
  3     return [[self.viewControllers lastObject] shouldAutorotate];
  4 }
  5 
  6 -(NSUInteger)supportedInterfaceOrientations {
  7     return [[self.viewControllers lastObject] supportedInterfaceOrientations];
  8 }
  9 
 10 - (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation {
 11     return [[self.viewControllers lastObject] preferredInterfaceOrientationForPresentation];
 12 }
 13 @end




 屏幕旋转方法调用流程


 要翻转的时候,首先响应的方法:


 - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation


 return YES则支持翻转,NO则不支持。


 紧接着


 -(void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration


 被调用。这个方法是发生在翻转开始之前。一般用来禁用某些控件或者停止某些正在进行的活动,比如停止视频播放。
 再来是


 -(void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration


 这个方法发生在翻转的过程中,一般用来定制翻转后各个控件的位置、大小等。可以用另外两个方法来代替:willAnimateFirstHalfOfRotationToInterfaceOrientation:duration:   和  willAnimateSecondHalfOfRotationFromInterfaceOrientation:duration:


 最后调用的是


 - (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation


 这个方法发生在整个翻转完成之后。一般用来重新启用某些控件或者继续翻转之前被暂停的活动,比如继续视频播放