iOS实现屏幕旋转有两种方式

1. 应用本身支持

2. 手动旋转UIView (这种方式我没找到旋转 系统控件的方法 如:键盘、导航、UIAlertView)

如果你只是要把竖屏的播放器,做成支持横屏的,没有其他界面操作, 就可以考虑用第二种方式去做,比较简单 ,不过要注意计算view Frame

这两种方式看你具体的使用场景了,具体场景选择合适的方式。

公司项目中有几个界面要支持横竖屏,(直播录制界面、直播观看界面、视频回看界面)。 刚开始我想着用第二种方式去解决,但是我们视频录制、观看界面有输入框,需要调用键盘,没找到可以手动旋转键盘的方式,就改为让应用本身支持屏幕旋转。具体做法如下:

我们项目有一个 UITabBarController ,它有3个子CustomNavigationController, 我写了一个

CustomNavigationController继承自 UINavigationController

1. tabBarController 中

- (BOOL)shouldAutorotate{

return [self.selectedViewController shouldAutorotate];

}

//支持的方向

- (UIInterfaceOrientationMask)supportedInterfaceOrientations{

return [self.selectedViewController supportedInterfaceOrientations];

}

//初始方向

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation{

return UIInterfaceOrientationPortrait;

}

2. CustomNavigationController 重写父类方法

- (BOOL)shouldAutorotate

{

return NO;

}

- (UIInterfaceOrientationMask)supportedInterfaceOrientations

{

return UIInterfaceOrientationMaskPortrait;

}

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation

{

return UIInterfaceOrientationPortrait;

}

3. 我的支持屏幕旋转的3个ViewController是presentViewController出来的; 在支持旋转的界面加入以下代码:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation

{

return toInterfaceOrientation != UIDeviceOrientationPortraitUpsideDown;

}

- (BOOL)shouldAutorotate

{

if (可以在此处做判断,如果满足条件就可以旋转) {

return YES;

}

return NO;

}

- (UIInterfaceOrientationMask)supportedInterfaceOrientations

{

if (可以在此处做判断,如果满足条件就支持竖屏) {

return UIInterfaceOrientationMaskPortrait;

}

return UIInterfaceOrientationMaskAllButUpsideDown;

}

还要做一件事---- 刷新UI布局;

4.

在ViewDidLoad中加入监听屏幕旋转的事件:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(orientChange:) name:UIDeviceOrientationDidChangeNotification object:nil];

在orientChange:方法中修改UI布局  ;

(注意: 看一下屏幕尺寸的变化 [[UIScreen mainScreen] bounds].size )

如果要控制CustomNavigationController push到的viewController的旋转,那么就在CustomNavigationController里面区分是哪个viewController,以便单独控制!

- (BOOL)shouldAutorotate

{

UIViewController *control = self.topViewController;

if ([control isKindOfClass:[@"支持旋转的ViewController" class]]) {

return [control shouldAutorotate];

}

return YES;

}

- (UIInterfaceOrientationMask)supportedInterfaceOrientations

{

UIViewController *control = self.topViewController;

if ([control isKindOfClass:[@"支持旋转的ViewController" class]]) {

return [control supportedInterfaceOrientations];

}

return UIInterfaceOrientationMaskPortrait;

}

iOS实现屏幕旋转的更多相关文章

  1. ios实现屏幕旋转的方法

    1.屏蔽AppDelegate下面的屏幕旋转方法 #pragma mark - 屏幕旋转的 //- (UIInterfaceOrientationMask)application:(UIApplica ...

  2. 监听iOS检测屏幕旋转状态,不需开启屏幕旋转-b

    -(void)rotation_icon:(float)n { UIButton *history_btn= [self.view viewWithTag:<#(NSInteger)#>] ...

  3. 监听iOS检测屏幕旋转状态,不需开启屏幕旋转

    -(void)rotation_icon:(float)n { UIButton *history_btn= [self.view viewWithTag:<#(NSInteger)#>] ...

  4. iOS强制屏幕旋转

    /** 强制旋转屏幕为纵向 (注:这种方式 键盘不能旋转过来; iOS8.x下 UIAlterView旋转不过来  ) @return */ + (void)rotateOrientationPort ...

  5. 【iOS】屏幕旋转,屏幕自适应方向变化

    1. iOS有四个方向的旋转,为了保证自己的代码能够支持旋转,我们必须首先处理一个函数: - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInter ...

  6. ios 关于屏幕旋转和屏幕晃动

    内置加速计是智能手机最酷的特性之一,ios可以通过这个小设备知道用户握持手机的方式,以及用户是否移动了手机,ios使用加速计处理自动旋转,并且许多游戏都是用它作为控制机制,它还可以用于检测摇动和其他突 ...

  7. iOS 控制屏幕旋转

    在你想支持横竖屏的viewController里面重写两个方法: 1 2 3 4 5 6 7 8 9 10 11 // 支持设备自动旋转 - (BOOL)shouldAutorotate {      ...

  8. IOS7学习之路八(iOS 禁止屏幕旋转的方法)

    - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation { retu ...

  9. OpenGL ES 响应屏幕旋转 iOS

    iOS下使用OpenGL 如果使用GLKit View 那么不用担心屏幕旋转的问题,说明如下: If you change the size, scale factor, or drawable pr ...

随机推荐

  1. Java 和C/C++的“语法”上的差异!

    额其实认为语言语法之间是没有可比性的! 但是因为额曾经学过C/C++,而今又学Java,有赵本山说的话:“知识都学杂了!”,所以我个人总结一下,望提醒自己! Java C++ double 要用%f: ...

  2. 【MySQL】漫谈MySQL中的事务及其实现

    最近一直在做订单类的项目,使用了事务.我们的数据库选用的是MySQL,存储引擎选用innoDB,innoDB对事务有着良好的支持.这篇文章我们一起来扒一扒事务相关的知识. 为什么要有事务? 事务广泛的 ...

  3. 51nod 1643 小Q的家庭作业

    题意: f(n) = sigma(gcd(i,n))  1 <= i <= n g(n) = sigma(f(d))    d | n n = x1 * x2 * ... * xm 其中 ...

  4. svn-git

    1.创建版本库 # svnadmin create proj 2.修改配置文件  Auth文件    [groups]    admin=shguo    [/]    @admin=rw    *= ...

  5. hammerJs-v2.0.4详解

    一.前言 移动端框架当前还处在初级阶段,但相对于移动端的应用来说已经有很长时间了.虽然暂时还没有PC端开发的需求量大,但移动端的Web必然是一种趋势,在接触移动端脚本的过程中,最开始想到的是juqer ...

  6. 带无缝滚动的轮播图(含JS运动框架)-简洁版

    昨天写的神逻辑,今天终于解决,经过大家的商讨,终于研究出来一套简单的代码!!! js代码如下: <script> window.onload = function() { var oWra ...

  7. 检测文件是否有BOM 头,并删除BOM头(php)

    将下面文件放在网站根目录访问即可,它会遍历当前目录下所有子目录,检测文件是否含有BOM头,并删除BOM头 <?php //remove the utf-8 boms //by magicbug ...

  8. eclipse项目debug方法

    属性查看代码在哪里存 本地项目启动 1,2步骤需要success

  9. Maven如何传递系统属性变量到TestNG

    本文介绍如何传递Maven pom.xml里的系统属性参数到TestNG,文章沿用笔者一贯的风格--例子驱动. 解决什么问题 1. 用过WebDriver的都知道,当你启动Chrome或IE的时候都需 ...

  10. LeetCode 328. Odd Even Linked List

    Given a singly linked list, group all odd nodes together followed by the even nodes. Please note her ...