iOS实现屏幕旋转

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;

}

时间: 2024-11-05 17:20:28

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

IOS UIDevice & IOS检测屏幕旋转实例

一 UIDevice 简介 UIDevice类提供了一个单例实例代表当前的设备.从这个实例中可以获得的信息设备,比如操作系统名称.电池电量值(batteryLevel).电池状态(batteryState).设备的类型(model,比如iPod.iPhone等).设备的系统(systemVersion) 二 获取 UIDevice 实例 通过[UIDevice currentDevice]可以获取这个单粒对象 UIDevice *device = [UIDevice currentDevice]

ios实现屏幕旋转的方法

1.屏蔽AppDelegate下面的屏幕旋转方法 #pragma mark - 屏幕旋转的 //- (UIInterfaceOrientationMask)application:(UIApplication*)application supportedInterfaceOrientationsForWindow:(UIWindow*)window //{ // return UIInterfaceOrientationMaskPortrait; //} 2.对UINavigationContr

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

1. iOS有四个方向的旋转,为了保证自己的代码能够支持旋转,我们必须首先处理一个函数: Objective-c代码   - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { return YES; } 2. 这个函数时用来确定我们的应用所支持的旋转方向.如果想要支持每个方向则直接返回YES就行,还可以单独判断某一方向: Objective-c代码   - (BO

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

在特别的场景下,需要针对屏幕旋转作特殊处理.在ios系统下实现相关的功能还是比较方便的. 我下面介绍两种方法: 1.注册UIApplicationDidChangeStatusBarOrientationNotification通知(举例:在一个viewcontroller类的viewdidload中注册该通知),示例代码如下: [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(statusBarO

iOS屏幕旋转方向的相关方法

在iOS应用开发过程中,经常会遇到设置屏幕方向,或者根据屏幕方向改变界面的时候,所以现在就来说一下屏幕方向的那些事情. 关于方向,经常会遇到以下的两个对象: 1.UIDeviceOrientation(机器设备的方向) ================================== UIDeviceOrientationUnknown //未知方向 UIDeviceOrientationPortrait, //设备直立,home按钮在下 UIDeviceOrientationPortrai

iOS学习笔记(3)— 屏幕旋转

iOS学习笔记(3)— 屏幕旋转 一.屏幕旋转机制: iOS通过加速计判断当前的设备方向和屏幕旋转.当加速计检测到方向变化的时候,屏幕旋转的流程如下: 1.设备旋转时,系统接收到旋转事件. 2.系统将旋转事件通过AppDelegate通知当前的主Window. 3.window通知它的rootViewController. 4.rootViewController判断所支持的旋转方向,完成旋转. iOS系统中屏幕旋转事件没有像触碰事件那样进行hitTest,所以只有rootViewControl

iOS 判断当前屏幕旋转状态

iOS提供了一个方法 可以很简单的判断当前屏幕旋转到什么状态 UIInterfaceOrientation sataus=[UIApplication sharedApplication].statusBarOrientation; 得到结果有集中情况 他们是按照当前 Home 键在手机的什么位置 得到结果是一个枚举类型 // Note that UIInterfaceOrientationLandscapeLeft is equal to UIDeviceOrientationLandscap

iOS屏幕旋转总结

一.屏幕旋转检测方法 在特别的场景下,需要针对屏幕旋转作特殊处理.在ios系统下实现相关的功能还是比较方便的. 我下面介绍两种方法: 1.监测状态栏方向 1 /** 2 * 当手机屏幕发生左右横屏变化时,我们需根据此时的设备方向做出相应的调整 3 * 例如,在ViewController中,我们需要监控手机屏幕是否转动了,需要在通知中心中注册通知 4 */ 5 - (void)viewWillAppear:(BOOL)animated{ 6 [super viewWillAppear:anima

ios 屏幕,状态栏(statusbar),程序窗口 尺寸获取和屏幕旋转时的尺寸变化

app尺寸,去掉状态栏 CGRect r = [ UIScreen mainScreen ].applicationFrame; 这个尺寸不会随着屏幕旋转而交换宽高,但屏幕旋转后,会自动修改宽高减掉状态栏高度. 竖屏时(4寸):x=0, y=20, width=320, height=548 横屏时(4寸):x=0,y=0, width=300, height=568 屏幕尺寸 CGRect rx = [ UIScreen mainScreen ].bounds; (4寸)rx=x=0, y=0