最近做ipad项目,遇到不少屏幕转屏发生的错误现象。(其中有些还是自己编码时的疏忽和不规范导致的)

那以下就是总结一些做支持旋转的时候的一些思路和碰到的问题时如何解决的。

首先描述 下工程的大体的一个结构特征。

工程是以UISplitViewController 为依托,然后它的viewControllers分别是    UITabBarController 和 UINavigationController。其中UITabBarController里面的viewControllers又分别是一个个UINavigationController组成。

具体详见图1竖屏

图2横屏

首先这边碰到一个问题是在横屏的时候要是没有对处理UITabBarController进行处理那么会出现在横屏启动程序的时候第一个UINavigationController会向下降低20像素的现象

详见图3

导致这个现象现在暂时的一个处理是在创建UITabBarController的时候先tabBarCtr.selectedIndex = 1;

然后在方法

- (void)viewDidLoad

{

tabBarCtr.selectedIndex = 0;

}

这样就可以暂时解决掉横屏显示异常的现象。(到时候在找到具体解决方法的时候在更新)

以上这边就是程序的大体的一个组成结构,下面进入到我们正式的屏幕旋转的时候是如何支持的。

以下针对的是主ctr 的操作即 UISplitViewController

屏幕旋转其实就是要管理好 1、UIViewController  2、添加在UIViewController上的view或者单独的一些view的处理控制。

首先对应UIViewController它里面提供了很多旋转时候的一些代理和方法。

1、设置支持自动适应横竖屏

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation

{

return YES;

}

2、在屏幕快要发生改变的时候进行处理

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration

{

//其实我们在这边要做的就是传递旋转消息和对view做相应的改变

for (int i=0; i<[tabBarCtr.viewControllers count]; i++)

{

UINavigationController *navCtr = (UINavigationController *)[tabBarCtr.viewControllers  objectAtIndex:i];

NSArray *ctrs = navCtr.viewControllers;

for (int j=0; j<[ctrs count]; j++)

{

//传递旋转的消息到UITabBarController底下的UIViewController

UIViewController *viewCtr = (UIViewController *)[ctrs objectAtIndex:j];

[viewCtr willRotateToInterfaceOrientation:toInterfaceOrientation duration:duration];

if ([viewCtr.view respondsToSelector:@selector(reloadSubviews)])

{

//对UIViewController进行重新刷新view的位置的操作

//reloadSubviews方法就是在每个ctr类中实现对ctr 上view重新布局的操作

[viewCtr.view performSelector:@selector(reloadSubviews)];

}

}

[navCtr willRotateToInterfaceOrientation:toInterfaceOrientation duration:duration];

}

//以上这种方式就已经对UIViewController和其上的view进行了旋转的相应操作

//个人觉得当然这里也可以用通知进行消息的传递

}

/

在某个ctr中 的 reloadSubviews方法样例

- (void)reloadSubviews

{

CGRect frame =  getScreenRect();//用来获取当前旋转后屏幕的大小  frame就是为刷新提供大小

AA.frame = CGRectMake(frame.size.width-140, 104, 120, 40);

BB.frame = CGRectMake(frame.size.width-140, 44, 120, 40);

Ctr.view.frame = CGRectMake(0, 200, frame.size.width, frame.size.height-200);

[tableView reloadData];

}

/

************************************************************

ipad旋转的时候如果在横屏的时候对UIViewController 进行push多层的时候出现异常(push后退出的动作本来是从右向左的展示,但是怪象就是退出的时候变成

从上到下的操作)

其实这个时候要去检查下你push的UIViewController 中对shouldAutorotateToInterfaceOrientation设置是否为与上层的ctr方法返回一致

如上层返回

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation

{

return YES;

}

那么你这边也应当是YES

*************************************************************

ipad,iphone 屏幕旋转支持相关推荐

  1. ios(ipad,iphone)屏幕旋转检测通用方法

    在特别的场景下,需要针对屏幕旋转作特殊处理.在ios系统下实现相关的功能还是比较方便的. 我下面介绍两种方法: 1.注册UIApplicationDidChangeStatusBarOrientati ...

  2. IOS基础之iPad的屏幕旋转方向判断

    IOS基础之iPad的屏幕旋转方向判断 #pragma mark - 屏幕旋转 - (void)viewWillTransitionToSize:(CGSize)size withTransition ...

  3. Iphone屏幕旋转

    该示例是想在手机屏幕方向发生改变时重新定位视图(这里是一个button) 1.创建一个View-based Application项目,并在View窗口中添加一个Round Rect Button视图 ...

  4. iPhone屏幕旋转机制详解

    主要说一下本人对iOS6.0及以前版本中对屏幕旋转的操作:包括重力感应旋转和强制旋转. 首先说一下重力感应引起的屏幕旋转. 在iOS6.0以前,只需要UIViewController的子类重载 - ( ...

  5. iOS6下关于屏幕旋转的控制

    之前做了一个应用,但由于整应用界面个都是竖屏,不允许横屏,所以一直没有关注这个,昨天开发一个图片预览的类库(类似系统的查看图片),其中一个特性当然需要支持横屏,所以就压找了一下资料,之前已经听闻在屏幕 ...

  6. iOS6的控制屏幕旋转技巧

    在iOS5.1 和 之前的版本中, 我们通常利用 shouldAutorotateToInterfaceOrientation: 来单独控制某个UIViewController的旋屏方向支持,比如: ...

  7. iphone强制旋转屏幕_我的iPhone或iPad屏幕无法旋转。 我如何解决它?

    iphone强制旋转屏幕 Khamosh Pathak Khamosh Pathak The iPhone and the iPad screen rotates almost seamlessly ...

  8. IOS(iphone,ipad,itouch)开发 之 屏幕旋转

    关于IOS开发中屏幕旋转的问题. 看过很多大牛的文章,都写过类似的,这里我只写一下常用的几个函数的具体用法. 首先是 - (BOOL)shouldAutorotateToInterfaceOrient ...

  9. 将iPad, iPhone直投屏幕用于TEASOFT课程录制

    ▌01 直投屏幕 现在越来越多的大屏设备支持iPad,手机能够直接图片投屏,这样可以使得原本来比较小的屏幕能够在更大的屏幕上的显示,便于共享屏幕和观看节目. 将iPad,手机的屏幕连入电脑,还可以完成 ...

最新文章

  1. 没有永远的对手只有永远的利益,浪潮与SAP合作了!
  2. qt 串口粘包_Qt Socket 传输图片——图像拆包、组包、粘包处理
  3. SpringCloud Config Server搭建
  4. lnmp一键包502 Bad Gateway解决方法
  5. java一维数组的特点,数据结构:java数组特点以及声明数组类
  6. hoj 13788 Dwarves
  7. dlgdata.cpp错误提示 解决方案
  8. Redis(二):Redis入门与性能测试
  9. Java:选择排序法
  10. JavaScript 弹出窗口总结
  11. BigDecimal 转 String
  12. 用python爬取杭电oj的数据
  13. android avrcp处理流程,android 蓝牙avrcp功能的实现.doc
  14. word如何快速转换成网页
  15. 使用监听扫描枪输入事件
  16. 乱码问题及字符编码集(一)
  17. module_platform_driver()
  18. dubbo admin安装中易踩坑点及解决方法
  19. 多网站如何共用一个微信
  20. 一场雨我们的见证了什么?

热门文章

  1. Android电子白板 视频会议电子白板
  2. cf自动退出服务器,《穿越火线》穿越火线自动退出攻略
  3. Memory System
  4. 建筑材料外贸出口公司网站搭建模板
  5. 微积分——一元微积分学
  6. 李亚鹏回应骗捐:没义务公布
  7. 【调剂】山西农业大学2020年硕士研究生调剂公告(第一批)
  8. pytorch 反卷积 可视化_Toybrick
  9. Android CoordinatorLayout打造酷炫的顶部栏
  10. 华中科技大学计算机组成计算机数据表示实验(hust)平台_【2019更新版】西北工业大学计算机软件考研信息汇总...