公司App里面有个需求,即所有界面都是竖屏,且不允许横屏切换,唯独有一个图表界面允许横屏。那么,根据此需求处理如下:

首先,确保App本身应该允许转屏切换:

再次,我的App里面都是走UINavigationController进行界面push切换的,所以首先创建一个UINavigationController的子类,并设定允许转屏:

 1 @implementation AppExtendNavigationController
 2 - (void)viewDidLoad {
 3 [super viewDidLoad];
 4 // Do any additional setup after loading the view.
 5 }
 6 - (void)didReceiveMemoryWarning {
 7 [super didReceiveMemoryWarning];
 8 // Dispose of any resources that can be recreated.
 9 }
10 #pragma mark 转屏方法重写
11 -(UIInterfaceOrientationMask)supportedInterfaceOrientations
12 {
13 return [self.viewControllers.lastObject supportedInterfaceOrientations];
14 }
15 -(UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
16 {
17 return [self.viewControllers.lastObject preferredInterfaceOrientationForPresentation];
18 }
19 -(BOOL)shouldAutorotate{
20 return self.visibleViewController.shouldAutorotate;
21 }

最后,在你不想转屏切换的ViewController上重写以下方法:

 1 #pragma mark 转屏方法 不允许转屏
 2 -(UIInterfaceOrientationMask)supportedInterfaceOrientations
 3 {
 4 return UIInterfaceOrientationMaskPortrait ;
 5 }
 6 - (BOOL)shouldAutorotate
 7 {
 8 return NO;
 9 }
10 -(UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
11 {
12 return UIInterfaceOrientationPortrait;
13 }
14 - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation{
15 return NO;
16 }

在你想转屏切换的ViewController上可以照这样重写(允许左右横屏以及竖屏):

 1 - (BOOL)shouldAutorotate {
 2 return YES;
 3 }
 4 -(UIInterfaceOrientationMask)supportedInterfaceOrientations
 5 {
 6 return UIInterfaceOrientationMaskAll;
 7 }
 8 - (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
 9 {
10 return UIInterfaceOrientationPortrait;
11 }
12 - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
13 {
14 return YES;
15 }

另外,在ViewController中对于转屏事件可以参见下面的方法进行捕获:

 1 - (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator
 2 {
 3 [super viewWillTransitionToSize:size withTransitionCoordinator:coordinator];
 4 [coordinator animateAlongsideTransition:^(id<UIViewControllerTransitionCoordinatorContext> context) {
 5 //计算旋转之后的宽度并赋值
 6 CGSize screen = [UIScreen mainScreen].bounds.size;
 7 //界面处理逻辑
 8 self.lineChartView.frame = CGRectMake(0, 30, screen.width, 200.0);
 9 //动画播放完成之后
10 if(screen.width > screen.height){
11 NSLog(@"横屏");
12 }else{
13 NSLog(@"竖屏");
14 }
15 } completion:^(id<UIViewControllerTransitionCoordinatorContext> context) {
16 NSLog(@"动画播放完之后处理");
17 }];
18 }

区分当前屏幕是否为横竖屏的状态,其实通过判断当前屏幕的宽高来决定是不是横屏或者竖屏:

竖屏时:宽<高

横屏时:宽>高

以上在IOS8、9中测试通过

 

转载于:https://www.cnblogs.com/fengmin/p/5377246.html

IOS横竖屏控制与事件处理相关推荐

  1. iOS8 横竖屏控制

    公司App里面有个需求,即所有界面都是竖屏,且不允许横屏切换,唯独有一个播放视频的界面允许横屏,大家都知道视频播放适配最大的播放屏幕那样是最好的.从网上多方查找资料,查到了这么一篇文章: [http: ...

  2. iOS 横竖屏处理方案

    概要:这里只说项目如何配置横竖屏,具体横竖屏适配可以参考下文图解---横屏的VC--最后一个方法里适配横竖屏,用 AutoLayout 的话就不用处理了,注意横屏后刘海屏的左右边距,我习惯一般直接给个 ...

  3. iOS 横竖屏切换解决方案

    iOS 横竖屏切换解决方案 参考文章: (1)iOS 横竖屏切换解决方案 (2)https://www.cnblogs.com/qqcc1388/p/7358552.html 备忘一下.

  4. 如何解决ios横竖屏切换布局错乱的问题

    如何解决ios横竖屏切换布局错乱的问题 可以使用 location.reload(); 强制刷新页面 mounted () {// 监听 resize 方法window.addEventListene ...

  5. iOS横竖屏旋转及其基本适配方法

    前段时间抽空总结了一下iOS视频播放的基本用法,发现这其中还有一个我们无法绕过的问题,那就是播放界面的旋转与适配.的确,视频播放与游戏类型的App经常会遇到这个的问题.由于至今接手的项目中不常涉及这块 ...

  6. ios 横竖屏转换通知问题

    关于ios 屏幕横竖屏切换问题 当设备方向改变时,系统会发送通知 UIDeviceOrientationDidChangeNotification,但这里有一个问题,当手动转换设备方向时,在瞬间又转换 ...

  7. iOS 横竖屏的切换以及个别界面横屏

    进入正文前先认识几个概念      portrait  竖屏(Home键在下边)      upside down  竖屏(Home键在上边) landscape  横屏   |landscape l ...

  8. ios 横竖屏切换总结

    UIViewController强制竖屏: 如果想整个APP竖屏,可以写一个BaseViewcontroller 1 先在AppDelegate.m里面重写如下方法 - (UIInterfaceOri ...

  9. iOS 横竖屏切换的方法

    //旋转方向 - (void)interfaceOrientation:(UIInterfaceOrientation)orientation { if ([[UIDevice currentDevi ...

最新文章

  1. 【pmcaff】 会员原创讨论贴:互联网产品部-如此的羁绊
  2. 关于ASP.NET MVC的业务逻辑验证(validation)
  3. 「CF 932E」 Team Work
  4. MongoDB 资源、库、工具、应用程序精选列表中文版
  5. 技术篇-符号制作-标记符号制作
  6. 奇虎360-数据可视化
  7. 点进来,你看到的就是全网最全c++11新特性(持续整理更新中)
  8. 远程调试监视器 已在计算机上关闭,错误:“Microsoft Visual Studio 远程调试监视器”(MSVSMON.EXE) 似乎没有在远程计算机上运行。...
  9. java时区转换_java中的时区转换
  10. UI :新手自学完全指南(1) Karen X. Cheng
  11. 小牛叔讲Python第10章:化繁为简的推导式
  12. linux(CentOS7)服务器环境搭建之-supervisor
  13. 数据可视化笔记7 网络数据可视化
  14. 零基础教程-如何快速将EXCEL表格数据拆分成多个文件
  15. java的environment_Java - 环境设置(Environment Setup)
  16. latex代码(参考文献,数学公式,插入图片,插入表格)
  17. 计算机硬件入门 之 译码器(以74LS138为例)
  18. 把 Notepad++ 打造成一款易用的C#脚本编辑器
  19. ai人工智能的本质和未来_人工智能手中的网络安全的未来
  20. 电脑之间通过串口、网口数据通信

热门文章

  1. linux下用户配置文件与系统配置文件
  2. 跟Kafka学技术系列之时间轮
  3. Spring Boot 2动态修改日志级别
  4. go get安装第三方包的前提条件和步骤
  5. Java集合:Hashtable源码分析
  6. C语言 什么时候用取地址什么时候不用取地址,符号讲解
  7. Vue 之qs 使用详解
  8. 引入spring-boot-starter-actuator,控制台没有mapper的映射信息打印问题
  9. java.util.NoSuchElementException: No value present
  10. ubyntu 链接mysql_ubuntu mysql 的安装、配置、简单使用,navicat 连接