iOS屏幕旋转控制

iOS屏幕旋转控制(iOS6之后)
      iOS6之前,子控制器只要覆盖父类的shouldAutorotateToInterfaceOrientation:方法就能单独控制某个指定的控制器,而iOS6之后,该方法被禁止使用,让旋转控制变得复杂了,本文只针对iOS6以后的旋转控制做讲解;
      iOS6以后,系统会调用rootViewControllerA控制器的shouldAutorotate等方法进行方向控制,所以,如果用户想单独控制每个页面,则我们需要在Root控制器的shouldAutorotate方法中,将控制返回值交给某个指定的控制器来返回,window的rootViewController分以下几种情况:UIViewController、UINavigationController、UIMainTabController、MMDrawerController开源框架(挑选这个做讲解);
 
      一、跟视图UIViewController:
      该情况不需要多谢,由UIviewController自己控制就行;
 
      二、跟视图为UINavigationController(在UINavigationController中设置)
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation

{

return [self.topViewController shouldAutorotateToInterfaceOrientation:toInterfaceOrientation];

}

//6.0之后系统调用该方法

- (BOOL)shouldAutorotate

{

//系统会调用跟视图的旋转控制方法,所以我们将跟视图将控制条件交给顶层视图(顶层视图即我们需要控制的视图)

系统调用该方法

return self.topViewController.shouldAutorotate;

}

//6.0之后系统调用该方法,应该支持的方向

-(NSUInteger)supportedInterfaceOrientations

{

return self.topViewController.supportedInterfaceOrientations;

}

三、跟视图为UITabBarController(在UITabBarController中设置)

//6.0之后系统调用该方法

- (BOOL)shouldAutorotate

{

//返回顶层视图的设置(顶层控制器需要覆盖shouldAutorotate方法)

UINavigationController *nav = (UINavigationController *)[self.viewControllersobjectAtIndex:mainTab.selectedIndex];

return nav.topViewController.shouldAutorotate;

}

return NO;

}

//6.0之后系统调用该方法

-(NSUInteger)supportedInterfaceOrientations

{

//返回顶层视图支持的旋转方向

UINavigationController *nav = (UINavigationController *)[self.viewControllersobjectAtIndex:mainTab.selectedIndex];

return nav.topViewController.supportedInterfaceOrientations;

return 0;

}

四、跟视图为MMDrawerController

//6.0一下系统调用该方法

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation

{

//返回顶层视图的设置

if (self.openSide == 0) {

//centerShow

MainTabBarController *mainTab = (MainTabBarController *)self.centerViewController;

UINavigationController *nav = (UINavigationController *)[mainTab.viewControllersobjectAtIndex:mainTab.selectedIndex];

NSLog(@"nav.topViewController.supportedInterfaceOrientations  : %d", nav.topViewController.shouldAutorotate);

return [nav.topViewController shouldAutorotateToInterfaceOrientation:toInterfaceOrientation];

}

return NO;

}

//6.0之后系统调用该方法

- (BOOL)shouldAutorotate

{

//返回顶层视图的设置

if (self.openSide == 0) {

//centerShow

MainTabBarController *mainTab = (MainTabBarController *)self.centerViewController;

UINavigationController *nav = (UINavigationController *)[mainTab.viewControllersobjectAtIndex:mainTab.selectedIndex];

NSLog(@"nav.topViewController.supportedInterfaceOrientations  : %d", nav.topViewController.shouldAutorotate);

return nav.topViewController.shouldAutorotate;

}

return NO;

}

//6.0之后系统调用该方法

-(NSUInteger)supportedInterfaceOrientations

{

//返回顶层视图支持的旋转方向

if (self.openSide == 0) {

//centerShow

MainTabBarController *mainTab = (MainTabBarController *)self.centerViewController;

UINavigationController *nav = (UINavigationController *)[mainTab.viewControllersobjectAtIndex:mainTab.selectedIndex];

NSLog(@"nav.topViewController.supportedInterfaceOrientations ; %d", nav.topViewController.supportedInterfaceOrientations);

return nav.topViewController.supportedInterfaceOrientations;

} else if (self.openSide == 1) {

//leftShow

}

return 0;

}

五、presentViewController视图控制

模态弹出来的视图,并不能在window的跟视图中控制,(因为它不在这个堆栈中?)如果模态视图为UINavigationcontrollor,则需要交给他自己的UINavigationcontrollor中控制。

(转)ios限制控制器旋转的更多相关文章

  1. iOS 控制单个控制器旋转

    iOS 控制单个控制器旋转 控制单个ViewController 的旋转 //不旋转,保持竖屏 //iOS 5 - (BOOL) shouldAutorotateToInterfaceOrientat ...

  2. iOS 视图控制器转场详解

    iOS 视图控制器转场详解 前言的前言 唐巧前辈在微信公众号「iOSDevTips」以及其博客上推送了我的文章后,我的 Github 各项指标有了大幅度的增长,多谢唐巧前辈的推荐.有些人问我相关的问题 ...

  3. iOS实现屏幕旋转

    iOS实现屏幕旋转有两种方式 1. 应用本身支持 2. 手动旋转UIView (这种方式我没找到旋转 系统控件的方法 如:键盘.导航.UIAlertView) 如果你只是要把竖屏的播放器,做成支持横屏 ...

  4. iOS视图控制器的生命周期

    今天面试有一道面试题因为回答不好,因为也不经常涉及所以有点模糊,我选择了最保守的回答,没有展开写出我对这个问题的理解. 问题:IOS 开发 loadView 和 viewDidLoad 的区别? 经过 ...

  5. 关于ios导航控制器的知识总结

    关于ios导航控制器的知识总结 添加了导航控制器后: 1.一个导航控制器会有一个顶部导航栏navigationbar和一个底部工具栏toolbar,它们是导航控制器navC的属性.且导航栏默认是不隐藏 ...

  6. iOS中控制器的释放问题

    iOS中控制器的释放问题 ARC工程是可以重写dealloc方法并被系统调用的,但不需要手动调用父类的dealloc,手写[super dealloc]方法会报错,事实上系统会自动帮你调用父类的dea ...

  7. iOS 容器控制器 (Container View Controller)

    iOS 容器控制器 (Container View Controller) 一个控制器包含其他一个或多个控制器,前者为容器控制器 (Container View Controller),后者为子控制器 ...

  8. iOS 图片裁剪 + 旋转

    iOS 图片裁剪 + 旋转 之前分别介绍了图片裁剪和图片旋转方法 <iOS 图片裁剪方法> 地址:http://www.cnblogs.com/silence-cnblogs/p/6490 ...

  9. AJ学IOS 之控制器view显示中view的父子关系及controller的父子关系_解决屏幕旋转不能传递事件问题

    AJ分享,必须精品 一:效果 二:项目代码 这个Demo用的几个控制器分别画了不通的xib,随便拖拽了几个空间,主要是几个按钮的切换,主要代码展示下: // // NYViewController.m ...

随机推荐

  1. 《UNIX环境高级编程》笔记--文件访问权限和新文件、目录所有权

    1.与进程关联的用户ID和组ID 与一个进程关联的ID有一下几个: 实际用户ID和实际组ID标识我们究竟是谁.通常在一个会话间值是不会改变的,但是超级用户进程有方法改变 他们,在以后的进程控制中会进行 ...

  2. jQuery学习笔记(一)——基础选择器、过滤选择器、表单选择器

    $()就是jQuery中的函数,它的功能是获得()中指定的标签元素.如演示样例中$("p")会得到一组P标签元素,当中"p"表示CSS中的标签选择器.$()中的 ...

  3. andengine游戏引擎总结进阶篇1

    本篇包括虚拟键盘,粒子系统 1虚拟键盘 分为两种,一种是单个虚拟键盘,另一种是多个方位虚拟键盘 1)加载虚拟键盘所需要的图片资源 private BitmapTextureAtlas mOnScree ...

  4. C# 中4个访问符和8个修饰符详解

    4个访问修饰符(是添加到类.结构或成员声明的关键字) Public:公有的,是类型和类型成员的访问修饰符.对其访问没有限制. Internal:内部的,是类型和类型成员的访问修饰符.同一个程序集中的所 ...

  5. 在SQL Server 2008 中使用SQL脚本创建登录用户并授权

    到处都使用超级用户sa显然是不安全的,因此有创建用户并让其只能访问某个数据库的必要.当然可以使用SQL Server自带的图形界面向导,但是太难用用了!有时候代码比较直接,比如这里: --使用已经创建 ...

  6. CentOS添加中科大、163 yum源

    首先备份CentOS-Base.repo [root@richard yum.repos.d]# mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos ...

  7. 应用程序无法启动,因为应用程序的并行配置不正确,有关详细信息,请参阅应用程序事件日志,或使用命令行SxsTrace.exe工具

    今天做项目,需要用C#引用C++的链接库文件,但是在调试的时候会报错这个错误. 运行SxsTrace.exe 以管理员用户登陆,启动cmd; 执行命令:SxsTrace Trace -logfile: ...

  8. 接收Dialog的值

    System.Windows.Forms.DialogResult result = MessageBoxEx.Show("保存成功", Language.String.Hint, ...

  9. 状态压缩DP------学习小记

    状态DP主要用的还是DP思想,顾名思义,加了一个状态,主要是用来求状态个数的. 状态是用二进制数来表示的,也就是用0或1来表示,每一行有一个状态数,就是由这一行的0或1组成的,首先我们要获得每行的状态 ...

  10. Android 通过HTTP POST请求互联网数据

    @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); s ...