注:由于当时的需求需要本文描述的方法只是视图旋转并不是真正的自动旋屏(不建议采用),末尾的第二个demo才是真正的自动旋屏且已正常上线APP,亲测有效。

问题描述:项目工程只支持竖屏,在播放器页面需要点击按钮进行横竖屏切换,并能根据手机的方向进行自动旋转

如图:只勾选了竖屏

解决方法:(主要是采用视图transform的原理 横屏时调整视频视图上的每个控件坐标位置 竖屏在调整回去)

1.电池状态栏的显示与隐藏

首先在plist文件中添加View controller-based status bar appearance 设置为no

然后在控制器中通过[[UIApplication sharedApplication] setStatusBarHidden: withAnimation:NO]方法

[[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:NO];

来显示或者隐藏状态栏,一般情况下竖屏时状态栏会显示 横屏则隐藏

导航栏也进行隐藏换成自己的头部视图条

self.navigationController.navigationBarHidden = YES;

2.通知监测状态栏方向(自动旋转屏幕)

设置全局的orientation:

orientation = [UIDevice currentDevice].orientation;

通知:

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

方法:

- (void)orientChange:(NSNotification *)noti {
// UIDeviceOrientation orientation = [UIDevice currentDevice].orientation; orientation = [UIDevice currentDevice].orientation; NSLog(@"打印现在的设备方向:%ld",(long)orientation);
switch (orientation)
{
case UIDeviceOrientationPortrait: {
NSLog(@"屏幕竖直");
isFullScreen = NO;
[[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:NO];
// [UIView animateWithDuration:0.25 animations:^{
// playView.transform = CGAffineTransformMakeRotation(0);
// playView.frame = CGRectMake(0, 0, widthAll, 300);
// topView.frame = CGRectMake(0, 0, widthAll, 50);
// footView.frame = CGRectMake(0, 250, widthAll, 50);
// menuBtn.frame = CGRectMake(widthAll-100, 10, 100, 30);
// }];
[self shupinAction];
}
break; case UIDeviceOrientationLandscapeLeft: { isFullScreen = YES;
NSLog(@"屏幕向左转");
[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:NO];
[self rightHengpinAction];
// [UIView animateWithDuration:0.25 animations:^{
// playView.transform = CGAffineTransformMakeRotation(M_PI*0.5);
// playView.frame = CGRectMake(0, 0, widthAll, heightAll);
// topView.frame = CGRectMake(0, 0, heightAll, 50);
// footView.frame = CGRectMake(0, widthAll-50, heightAll, 50);
// menuBtn.frame = CGRectMake(heightAll-100, 10, 100, 30);
// }];
}
break;
case UIDeviceOrientationLandscapeRight: {
isFullScreen = YES;
NSLog(@"屏幕向右转");
[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:NO];
[self leftHengpinAction];
// [UIView animateWithDuration:0.25 animations:^{
// playView.transform = CGAffineTransformMakeRotation(-M_PI*0.5);
// playView.frame = CGRectMake(0, 0, widthAll, heightAll);
// topView.frame = CGRectMake(0, 0, heightAll, 50);
// footView.frame = CGRectMake(0, widthAll-50, heightAll, 50);
// menuBtn.frame = CGRectMake(heightAll-100, 10, 100, 30);
// }];
}
break;
default:
break;
}
}

3.点击按钮进行横竖屏切换

添加按钮,设置点击方法

-(void)rotateScreeen:(UIButton *)btn
{
NSLog(@"旋转屏幕");
btn.selected = !btn.selected;
if (btn.selected) {
isFullScreen = YES;
[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:NO]; if (orientation == UIDeviceOrientationPortrait) {
NSLog(@"当前竖屏模式");
[self rightHengpinAction];
}else if(orientation == UIDeviceOrientationLandscapeLeft)
{
NSLog(@"当前左横屏模式");
[self shupinAction];
}else if(orientation == UIDeviceOrientationLandscapeRight)
{
NSLog(@"当前右横屏模式");
[self shupinAction];
} }else{
isFullScreen = NO;
[[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:NO];
[self shupinAction]; } }

4.程序运行效果

竖屏效果:

横屏效果:

简单的demo下载地址(未作ui):http://download.csdn.net/user/wusangtongxue

(更新)第二次修改后的真正横屏demo地址:http://download.csdn.net/download/wusangtongxue/10049935

iOS 全局竖屏 单个viewcontroller点击按钮支持横屏的更多相关文章

  1. iOS设置竖屏,播放视频可以任性旋转的解决方法,亲测可用

    之前在网上找了很多方法,都是强制横屏,但是如果设备关闭旋转锁定,强制横屏后把设备竖立起来,播放器也会跟着竖过来,但是就回不去了.现在项目要求让app默认都是竖屏,只有在全屏播放的时候可以自由旋转,于是 ...

  2. ios手机竖屏拍照图片旋转90°问题解决方法

    手机拍照会给图片添加一个Orientaion信息(即拍照方向),如下: 用ios手机拍照,系统会给图片加上一个方向的属性, ios相机默认的拍照方向是后摄Home键在右为正,前摄Home键在左为正. ...

  3. COCOS2D-X暂时设置竖屏,过一阵子再设置回横屏

    mainActivity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);//竖屏 竖屏是JAVA代码 另外再改动C ...

  4. iOS 实现单个页面支持横竖屏,其他页面只能竖屏

    最近在自己的项目里面 有需要做一个需求 : app中某一个页面支持横竖屏, 而其他页面只能竖屏. 1 2 实现方法如下: 1 首先需要Xcode中选中支持的屏幕方向  2 Appdelegate中 . ...

  5. IOS竖屏应用单个页面横屏的解决办法

    昨天朋友问我,怎么实现在竖屏的应用里,显示一个横屏的应用,由于也没做过 就说不知道了,但是我觉得会有这样的API ,因为我手机里就安装有这种类型的软件 今天早上起来,就想做一个Demo出来,惯例的是查 ...

  6. mui 横屏 竖屏

    在项目中只有某个页面需要横屏 ,其他的都是竖屏展示的. 假设a页面横屏 ,返回之后竖屏 b页面 a+ 将其设置为横屏显示: b+ 将其设置为竖屏显示 但是进入a页面之后再返回b页面时 b页面也会称为横 ...

  7. HTML5中判断横屏竖屏

    在移动端中我们经常碰到横屏竖屏的问题,那么我们应该如何去判断或者针对横屏.竖屏来写不同的代码呢. 这里有两种方法: 一:CSS判断横屏竖屏 写在同一个CSS中 1 2 3 4 5 6 @media s ...

  8. Android时时监測手机的旋转角度 依据旋转角度确定在什么角度载入竖屏布局 在什么时候载入横屏布局

    一.场景描写叙述: 最近开发中遇到个问题,就是我们在做横竖屏切换的功能时.横竖屏布局是操作系统去感知的,作为开发员没法确定Activity在什么时候载入横屏布局,在什么时候载入竖屏布局.因此为了找到载 ...

  9. ionic2/3 禁止屏幕旋转,禁止横屏,竖屏

    ionic2/ionic3禁止屏幕旋转,及解除禁止旋转 1.添加插件: cmd到项目目录---> cordova plugin add cordova-plugin-screen-orienta ...

随机推荐

  1. CodeForces Gym 100685C Cinderella (水题)

    题意:给定 n 个杯子,里面有不同体积的水,然后问你要把所有的杯子的水的体积都一样,至少要倒少多少个杯子. 析:既然最后都一样,那么先求平均数然后再数一下,哪个杯子的开始的体积就大于平均数,这是一定要 ...

  2. OC: 类的扩展、类的延展、协议、 NSDate

      NSDateFormatter 指定⽇日期格式: NSDateFormatter * formatter = [[NSDateFormatter alloc] init]; [formatter ...

  3. TCP客户机-服务器

    1 僵尸进程 2 信号处理 信号: 1 由一进程发往另一进程 2 由内核发往某进程   僵尸状态: 父进程取回子进程的相关信息,进程的ID,终止状态,子进程的资源利用信息   编程时: 1 当派生子进 ...

  4. openNebula Image上传

    Rack:ruby webserver框架 https://rack.github.io/ 文件上传使用基于tempfile 库 文件上传要经历两个过程: 1.上传文件传到opennebule sun ...

  5. IE6/IE7/IE8 FF常见问题解决

    (从已经死了一次又一次终于挂掉的百度空间人工抢救出来的,发表日期2014-04-08) <style type="text/css" > *{ margin:0px a ...

  6. 毕业设计--天气预报App

    9月中旬,开始动手做我的毕业设计了,之前一直在纠结做啥,后来想想,既然是做毕业设计,那就大胆地做点自己没接触过的东西吧.然后网上查找资料得知做天气预报需要用到开放的API,而且要用那种现在还在维护的, ...

  7. eclipse界面语言的切换方法

    很久以前在我一个朋友的blog上看到过关于eclipse中英文语言界面切换的方法,觉得挺不错,后来自己也用过几次 现在想想,这个方法真的很不错,刚才又在自己机器上做了几次试验,发现eclipse事实上 ...

  8. __declspec,__cdecl,__stdcall区别和作用

    _cdecl和__stdcall都是函数调用规范(还有一个__fastcall),规定了参数出入栈的 顺序和方法,如果只用VC编程的话可以不用关心,但是要在C++和Pascal等其他语言通信的时候就要 ...

  9. PostgreSQL的AnynonArray的例子

    程序: CREATE OR REPLACE FUNCTION kappend(anynonarray, anyelement) RETURNS text AS $$ ; $$ LANGUAGE SQL ...

  10. 怎样对ListView的项进行排序

    当您使用资源浏览器查看文件时,您能够随心所欲的按名称.大小.类型及改动日期不同的列对文件进行大小排序..Net提供的ListView组件没有直接提供这样的功能,但要实现并不难.   ListView. ...