博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS实现屏幕旋转
阅读量:6364 次
发布时间:2019-06-23

本文共 2505 字,大约阅读时间需要 8 分钟。

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;

}

 

 

 

转载于:https://www.cnblogs.com/lishuming/p/5251372.html

你可能感兴趣的文章
虚拟研讨会:.NET的未来在哪里?
查看>>
Java 20年:历史与未来
查看>>
彻底理解Javascript中的原型链与继承
查看>>
2017 Vue.js 2快速入门指南
查看>>
REST是新SOAP?
查看>>
腾讯最大规模裁撤中层干部,让贤年轻人
查看>>
美国国会为苹果和FBI举行了听证会
查看>>
gRPC-Web发布,REST又要被干掉了?
查看>>
如何:强化 TCP/IP 堆栈安全
查看>>
Spring3 MVC中使用Swagger生成API文档
查看>>
FastCGI PHP on Windows Server 2003
查看>>
LimeSDR Getting Started Quickly | LimeSDR上手指南
查看>>
JSP标签JSTL的使用(1)--表达式操作
查看>>
SAP顾问的人脉比技术更为重要
查看>>
FI/CO PA考试试卷
查看>>
汽车介质应用非常严苛?没关系,新技术带来的高精度传感器十分适应!
查看>>
天合光能 - 用计算捕捉“光的能量”
查看>>
使用sysbench压力测试MySQL(一)(r11笔记第3天)
查看>>
css知多少(11)——position
查看>>
【Spring】定时任务详解实例-@Scheduled
查看>>