今天突然想起来,以前的一个问题没有解决,就上网百度了一些方法,看到一篇文章,写的很详细,我就操作试试,结果还真的实现了功能,接下来我将重复他的结合我自己的测试,说一下iOS中的旋屏问题。
1、首先配置工程 使其支持屏幕旋转
2、如果你的rootViewController为UITabBarController的情况下 建议创建一个UITabBarController的公共父类 在里面实现如下代理方法
preferredInterfaceOrientationForPresentation 我理解为打开时当前界面的朝向
shouldAutorotate 是否支持旋转
supportedInterfaceOrientations 所支持的旋转方向
return返回的为当前选中 tabar 的item的情况
具体的代码如下:
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation {
return [self.selectedViewController preferredInterfaceOrientationForPresentation];
}
- (BOOL)shouldAutorotate {
return YES;
}
- (UIInterfaceOrientationMask)supportedInterfaceOrientations {
return [self.selectedViewController supportedInterfaceOrientations];
}
3、在 UITabBarController 中放UINavigationController后 还需要在 UINavigationController中实现还是那三个方法 因为我的界面只有VideoDetail1ViewController需要横竖屏的处理 所以我只是单独的做了判断
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation {
if ([self.topViewController isKindOfClass:[VideoDetail1ViewController class]]) {
return UIInterfaceOrientationPortraitUpsideDown;
}
return UIInterfaceOrientationPortrait;
}
- (BOOL)shouldAutorotate {
if ([self.topViewController isKindOfClass:[VideoDetail1ViewController class]]) {
return YES;
}
return NO;
}
- (UIInterfaceOrientationMask)supportedInterfaceOrientations {
if ([self.topViewController isKindOfClass:[VideoDetail1ViewController class]]) {
return UIInterfaceOrientationMaskAllButUpsideDown;
}
return UIInterfaceOrientationMaskPortrait;
}
如果不需要特定的对某个界面做旋屏的还,可以直接进行如下操作:
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation {
return [self.topViewController preferredInterfaceOrientationForPresentation];
}
- (BOOL)shouldAutorotate {
return [self.topViewController shouldAutorotate];
}
- (UIInterfaceOrientationMask)supportedInterfaceOrientations {
return [self.topViewController supportedInterfaceOrientations];
}
4、然后如果某个界面想支持屏幕旋转 只需要在里面重写写方法即可
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation {
return UIInterfaceOrientationPortrait;
}
- (BOOL)shouldAutorotate {
return YES;
}
- (UIInterfaceOrientationMask)supportedInterfaceOrientations {
return UIInterfaceOrientationMaskAllButUpsideDown;
}
5、 运行就可以达到想要的结果
(总结下来为 APP 中 UITabBarController中的支持旋转由 UITabBarController 下的 UINavigationController 控制 而UINavigationController的旋转由你自己在当前Controller中设置的值来控制),如果rootViewController不是UITabBarController的话 同理...
附: 在手机为横屏模式下打开APP APP会按照横屏来布局 需要在 如下方法中新加
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{
[[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationPortrait];//此方法 ....
}
这样就会解决横屏模式下打开 APP 产生的一些问题
(容易出现的一些问题为:当你在didFinishLaunchingWithOptions中 加载了另一个 window 的时候需要在自己建的 window 中也遵守屏幕旋转的几个代理方法 不然横屏模式下打开APP布局依然会乱)