现在开发的APP大部分界面是竖屏的,只有视频播放的界面和webview阅读文字的界面是可以横屏操作的。
那么就进行如下处理:
1、首先确保APP支持横屏旋转
2、我的App里面都是走UINavigationController进行界面push切换的,所以首先创建一个UINavigationController的子类,并设定允许转屏:
#pragma mark 转屏方法重写-(UIInterfaceOrientationMask)supportedInterfaceOrientations{ return [self.viewControllers.lastObject supportedInterfaceOrientations];}-(UIInterfaceOrientation)preferredInterfaceOrientationForPresentation{ return [self.viewControllers.lastObject preferredInterfaceOrientationForPresentation];}-(BOOL)shouldAutorotate{ return self.visibleViewController.shouldAutorotate;}
在不想转屏切换的ViewController上重写以下方法:
#pragma mark 转屏方法 不允许转屏-(UIInterfaceOrientationMask)supportedInterfaceOrientations{ return UIInterfaceOrientationMaskPortrait ;}- (BOOL)shouldAutorotate{ return NO;}-(UIInterfaceOrientation)preferredInterfaceOrientationForPresentation{ return UIInterfaceOrientationPortrait;}- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation{ return NO;}
在想转屏切换的ViewController上可以照这样重写(允许左右横屏以及竖屏):
- (BOOL)shouldAutorotate { return YES;}-(UIInterfaceOrientationMask)supportedInterfaceOrientations{ return UIInterfaceOrientationMaskAll;}- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation{ return UIInterfaceOrientationPortrait;}- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation{ return YES;}
另外,在ViewController中对于转屏事件可以参见下面的方法进行捕获:
- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id)coordinator{ [super viewWillTransitionToSize:size withTransitionCoordinator:coordinator]; [coordinator animateAlongsideTransition:^(id context) { //计算旋转之后的宽度并赋值 CGSize screen = [UIScreen mainScreen].bounds.size; //界面处理逻辑 self.lineChartView.frame = CGRectMake(0, 30, screen.width, 200.0); //动画播放完成之后 if(screen.width > screen.height){ NSLog(@"横屏"); }else{ NSLog(@"竖屏"); } } completion:^(id context) { NSLog(@"动画播放完之后处理"); }];}
区分当前屏幕是否为横竖屏的状态,其实通过判断当前屏幕的宽高来决定是不是横屏或者竖屏:
竖屏时:宽<高
横屏时:宽>高
以上在IOS8、9中测试通过