前言
如果做过项目中有视频播放的内容 一定遇到过全屏播放视频的需求 一般来说 直接弹出一个modal viewcontroller来全屏播放视频就ok了
但是为了用户体验 可能需要在同一个viewcontroller中进行全屏和非全屏的切换 这个时候可能就需要强制旋转屏幕来做到
那么如何完美的对屏幕进行强制旋转呢?
研究
首先 你得在项目的的plist中或者target的general选项里配置好APP所支持的所有放心啊个
然后 在ios6+之后 屏幕旋转的控制权交给了rootViewController(这里没探讨presentViewController的情况 只考虑普通的布局) 那么基本上所有的APP都是基于UINavigationController
或者UITabbarViewController
做为rootViewController的
所以要灵活的控制每个push进来的view的旋转 需要修改一下UINavigationController
或者UITabbarViewController
的以下几个方法(可以添加Category
也可以继承一下)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
//UINavigationController - (BOOL)shouldAutorotate { return self.topViewController.shouldAutorotate; } - (NSUInteger)supportedInterfaceOrientations { return self.topViewController.supportedInterfaceOrientations; } - (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation { return self.topViewController.preferredInterfaceOrientationForPresentation; } //UITabbarViewController //注意 这里的selectedViewController如果是UINavigationController的话 也需要对它做上面的修改 - (BOOL)shouldAutorotate { return self.selectedViewController.shouldAutorotate; } - (NSUInteger)supportedInterfaceOrientations { return self.selectedViewController.supportedInterfaceOrientations; } - (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation { return self.selectedViewController.preferredInterfaceOrientationForPresentation; } |
这样 控制旋转的主动权就交还到了每个viewController的手上了
方法:
[[UIDevice currentDevice] setValue:
[NSNumber numberWithInteger: self.isFullScreen?UIInterfaceOrientationLandscapeRight:UIInterfaceOrientationPortrait]
forKey:@"orientation"];