iOS6 UI 旋转问题

目前还是菜鸟阶段,遇到问题基本都google

目前在做一个iOS项目,要求UI界面适应旋转,
iOS要求 5.1以上

参考官方文档:
https://developer.apple.com/library/ios/#featuredarticles/ViewControllerPGforiPhoneOS/RespondingtoDeviceOrientationChanges/RespondingtoDeviceOrientationChanges.html

--------------------------------------------------------------------
iOS 5.1
在iOS 5.1上支持UI随设备旋转,基本就是实现下面的方法

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation {
	return YES;
}


--------------------------------------------------------------------

iOS 6.0+
在iOS 6上支持UI随设备旋转的方法在网上查了查多数是说要实现另外两个方法(如下)。
- (NSUInteger)supportedInterfaceOrientations

- (BOOL)shouldAutorotate


但是我的代码原本是4.0以前build的工程,我将deployment target设置为5.1, 打算支持iOS5.1以上的设备, 于是在ViewController里面实现了上面两个方法,模拟器测试,均无任何反应。网上google了半天,也顺带磨了半天官方文档,简单解决方案如下:

1. 工程的TARGETS的Summary里面设置下: Supported Interface Orientations

2.  修改附加view的方式
     一般情况下,以前的工程有一个MainWindow.xib文件,这个文件中会指定window,rootviewController, Delegate等等,那么在工程的***Delegate.m中应该会将view附加到window中,那马iOS4.0以前的做法是这样的
[self.window addSubview:navController.view];


这种做法的话,在iOS6设备中,即便你实现了上面的两个方法也无法支持旋转的。
我们可以修改为如下:
if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 4.0) {
        // for iOS6.x Rotate
        self.window.rootViewController = navController;
    } else {
        [self.window addSubview:navController.view];
    }


以上两步完成之后(不需要实现那两个方法),在iPhone模拟器中试试看,可以看出Portrait,LeftLandscape, RightLandscape已经可以了,至于PortraitUpDown不行是因为iPhone中UIViewController自己默认只支持前面3种旋转(这个大家都知道)


----------
如果想要支持PortraitUpDown,此时就需要将上面的navController子类化,然后在其子类中实现之前的两个方法即可。

你可能感兴趣的:(ios,Objective-C)