ios6/ios7 画面旋转的问题


from:http://blog.sina.com.cn/s/blog_71715bf801019oye.html


在ios5下画面的旋转都是shouldAutorotateToInterfaceOrientation来控制的,但是这个函数在ios6下不起作用。

在ios6下使用supportedInterfaceOrientations、shouldAutorotate来控制。

如果单一的控制画面那么只需要加在上面两个函数。如下

- (BOOL)shouldAutorotate {  

  

    return YES;  

}  

  1.   

  2. - (NSUInteger)supportedInterfaceOrientations {  

  3.   

  4.     return UIInterfaceOrientationMaskAll;  

  5. }  

 

如果是含有UINavigationController、UITabBarController的话,那么修改部分就多了。

用其派生类的,在派生类中增加上面的supportedInterfaceOrientations、shouldAutorotate函数。

下面如MyNavigationController就是UINavigationController   的派生类。
修改部分如下

 1:在旧的程序中AppDelegate的部分如

定义的 UINavigationController            *navigationController;

  1. [window addSubview:[navigationController view]];  //不能旋转  

改为

 

MyNavigationController            *myNavigationController;

  1. self.window.rootViewController = self.myNavigationController;  


 

派生类主要部分为

  1. #import "MyNavigationController.h"  

  2.   

  3. @interface MyNavigationController ()  

  4.   

  5. @end  

  6.   

  7. @implementation MyNavigationController  

  8.   

  9. - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil  

  10. {  

  11.     self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];  

  12.     if (self) {  

  13.         // Custom initialization  

  14.     }  

  15.     return self;  

  16. }  

  17.   

  18. - (void)viewDidLoad  

  19. {  

  20.     [super viewDidLoad];  

  21.     // Do any additional setup after loading the view.  

  22. }  

  23.   

  24. -(BOOL)shouldAutorotate  

  25. {  

  26.     return [self.viewControllers.lastObject shouldAutorotate];  

  27. }  

  28.   

  29. -(NSUInteger)supportedInterfaceOrientations  

  30. {  

  31.     return [self.viewControllers.lastObject supportedInterfaceOrientations];  

  32. }  

  33.   

  34. -(UIInterfaceOrientation)preferredInterfaceOrientationForPresentation  

  35. {  

  36.     return [self.viewControllers.lastObject preferredInterfaceOrientationForPresentation];  

  37. }  

  38.   

  39. - (void)didReceiveMemoryWarning  

  40. {  

  41.     [super didReceiveMemoryWarning];  

  42.     // Dispose of any resources that can be recreated.  

  43. }  

  44.   

  45. @end  


这样就能控制所有的控制画面中的旋转了,当然别忘了在每个控制画面都增加旋转的函数。

 

根据多篇文章改写的,目前根据这样的方式,能够解决自己目前的问题,

如果大家还有更好的方式,还需要多指教。

官方

http://developer.apple.com/library/ios/#featuredarticles/ViewControllerPGforiPhoneOS/RespondingtoDeviceOrientationChanges/RespondingtoDeviceOrientationChanges.html#//apple_ref/doc/uid/TP40007457-CH7-SW1


你可能感兴趣的:(ios6/ios7 画面旋转的问题)