在手机开发过程中,你可能会需要你的手机横过来看,有可能是全部界面都要横过来,有可能是当用户把手机横过来的时候,你的界面也想让他横过来,也有可能是只有部分界面需要横着显示的,根据不同的情况,有不同的解决办法。

首先,我们要理清,方向分两种,一种是设备的方向,一种是视图方向。设备方向有两种方式可以改变,一个是通过重力加速计,即旋转屏幕的方式去改变,一个是通过代码,调用UIDevice的方式去改变!直接设置 UIDevice 的 orientation,但是这种方式不推荐,上传appStore有被拒的风险。

if ([[UIDevice currentDevice] respondsToSelector:@selector(setOrientation:)]) {  [[UIDevice currentDevice] performSelector:@selector(setOrientation:) withObject:(id)UIInterfaceOrientationPortrait];
}

我们都是通过改变视图的方向来让屏幕旋转的。

情景一:程序中所有界面都是横屏显示的

解决办法:修改工程配置文件plist,里面的UISupportedInterfaceOrientations属性表示程序支持的方向,我们把它改成只支持Left和Right

<key>UISupportedInterfaceOrientations</key>
<array><string>UIInterfaceOrientationLandscapeLeft</string><string>UIInterfaceOrientationLandscapeRight</string>
</array>

UIInterfaceOrientationPortrait表示Home键按钮的方向,也就是竖屏方向,不要他

这样,程序启动的时候就是横屏显示了,当然你需要使用横屏的插件来设计界面了,可以使用

Interface Builder工具 
解决办法二:调整window的方向,这样就不用每个view都改变了
设置状态条的方向和使用transform旋转一下window.不翻状态条的方向,会出现键盘也不会跟着翻.如果只是翻了某个view,那么会出现其它view不会翻.对于我的具体情况,翻window最简单.
UIApplication *application=[UIApplication sharedApplication];
[application setStatusBarOrientation:UIInterfaceOrientationLandscapeRight];
application.keyWindow.transform=CGAffineTransformMakeRotation(M_PI);

注:需要设置程序不会自动响应自动旋转

//因为想要手动旋转,所以先关闭自动旋转
- (BOOL)shouldAutorotate{return NO;
}

情景二:程序中只有某个view需要横屏显示,手动设置,不支持重力加速器感应
解决办法:在指定的ViewController里面进行设置,取消自动旋转,调用CGAffineTransformMakeRotation让视图旋转,并重新定义大小

这时plist里面就不能像之前那么设置了,要把UIInterfaceOrientationPortrait也加进去,因为还有别的页面是竖屏的
首先关闭自动旋转,在ViewController.m里面加上这句
//因为想要手动旋转,所以先关闭自动旋转
- (BOOL)shouldAutorotate{return NO;
}

然后就是实现旋转的代码了,我们使用的是假旋转,并没有改变 UIDevice 的 orientation,而是改变某个view的 transform,利用 CGAffineTransformMakeRotation 来达到目的

- (void)viewDidLoad
{[super viewDidLoad];// Do any additional setup after loading the view, typically from a nib.//实例化chartcv =[[ChartViewBase alloc] initWithFrame:CGRectMake(0, 0, 320, 240)];[self.view addSubview:cv];//旋转屏幕,但是只旋转当前的View[[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationLandscapeRight];self.view.transform = CGAffineTransformMakeRotation(M_PI/2);CGRect frame = [UIScreen mainScreen].applicationFrame;self.view.bounds = CGRectMake(0, 0, frame.size.height, 320);
}

注意:
1. 只需要改变self.view.transform,那么self.view的所有subview都会跟着自动变;其次因为方向变了,所以self.view的大小需要重新设置,不要使用self.view.frame,而是用bounds。
2. 如果shouldAutorotate 返回YES的话,下面设置setStatusBarOrientation 是不管用的!setStatusBarOrientation只有在shouldAutorotate 返回NO的情况下才管用!

情景三:程序需要支持重力感应,当用户把手机横过来,程序也要横过来
解决方案:重新以下两个方法
- (BOOL)shouldAutorotate;
- (NSUInteger)supportedInterfaceOrientations;
IOS6里面,控制某个viewController旋转并不是像IOS5或者IOS4一样在这个viewController里面重写上面那2个方法,而是需要在这个viewController的rootViewController(根视图控制器)里面重写,怎么解释呢?就是最前面的那个viewController,直接跟self.window接触的那个controller。
UIViewController *viewCtrl = [[UIViewController alloc] init];
UINavigationController *navCtrl = [[UINavigationController alloc] initWithRootViewController:viewCtrl];
if ([window respondsToSelector:@selector(setRootViewController:)]) {  self.window.rootViewController = navCtrl;
} else {  [self.window addSubview:navCtrl.view];
} 

如果需要设置viewCtrl的旋转,那么不能在UIViewController里面重写shouldAutorotate和supportedInterfaceOrientations方法,而是需要在navCtrl里面设置,又因为UINavigationController是系统控件,所以这里需要新建一个UINavigationController的子navigationController的子类,然后在里面实现shouldAutorotate和supportedInterfaceOrientations方法,比如:

-(NSUInteger)supportedInterfaceOrientations{  return UIInterfaceOrientationMaskAllButUpsideDown;
}  - (BOOL)shouldAutorotate{  return YES;
}  

IOS开发之——手动设置屏幕旋转相关推荐

  1. iOS开发 - 不进入待机(屏幕保持唤醒)---UIApplication学习

    iOS开发 - 不进入待机(屏幕保持唤醒)---UIApplication学习 如果你不希望应用运行时 iPhone 进入锁屏待机状态,加入下面这行代码即可 [[UIApplication share ...

  2. iOS开发icon图标设置

    图标的圆角和光晕效果 圆角效果.图标的圆角效果是系统自动加上的,我们不能控制.这也是为什么我们看到的每个图标,其圆角效果是完全相同的. 光晕效果.光晕效果也是系统加上的,和"圆角" ...

  3. IOS基础之iPad的屏幕旋转方向判断

    IOS基础之iPad的屏幕旋转方向判断 #pragma mark - 屏幕旋转 - (void)viewWillTransitionToSize:(CGSize)size withTransition ...

  4. android无法自动旋屏,Android 手动设置屏幕方向后不能自动转屏问题

    如题,Android在手动设置屏幕方向后不能使用自动转屏了,这是因为手动设置屏幕方向 如: setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATIO ...

  5. 苹果手机计算机无法横屏,苹果手机怎么设置屏幕旋转失灵了怎么办

    苹果手机有个实用小功能之一就是设置屏幕旋转,方便我们看电影时候横放自动旋转为横屏,设置很简单.下面由学习啦小编为你整理了苹果4s屏幕自动旋转在哪里设置的相关方法,希望对你有帮助! 4s屏幕旋转设置的方 ...

  6. IOS开发--icon图标设置

    ios7正式发布已经有一段时间了,今天我主要说一下app icon的变化,在苹果iOS 7正式版发布之后,苹果要求开发者提供尺寸更大的应用图标.作为iOS 7界面改变之一,相比iOS 6,iOS 7主 ...

  7. android11 动态设置屏幕旋转方向

    1.需求 客户动态设置屏幕的旋转方向,下次开机保持设置的屏幕方向,开关机动画也要跟着旋转. 2.分析 如果开关机动画也要跟着旋转,就不跟再LocalDisplayAdapter.java里面改了,因为 ...

  8. iOS开发技巧:设置App icon图标及修改应用程序名

    前言 这是iOS开发技巧系列博客的第二篇,本篇主要简单介绍一下如何设置应用程序的icon图标以及修改应用程序名. 设置 icon 首先我们来看看如何设置App icon图标,设置应用程序的icon图标 ...

  9. iOS开发:字符串设置指定内容的文字颜色、文字大小、文字字体类型

    在iOS开发过程中,会有一些为了提高APP的视觉效果而设置的特别一点的效果,比如一行文字需要自定义不同的颜色和文字大小,这就用到通过富文本来设置字符串的颜色.大小和文字类型.这篇博文我打算只介绍怎么设 ...

最新文章

  1. LIC-Fusion 2.0:基于滑动窗口法平面特征跟踪的激光雷达惯性相机里程计
  2. apache虚拟机配置步骤和修改访问端口
  3. java读取pfx或P12格式的个人交换库公私钥
  4. java获取主机信息大全,网络编程:Java获取网络主机信息
  5. 听说你还不懂哈夫曼树和哈夫曼编码
  6. 嵌入式数据库Sqlite移植教程-转
  7. 访问vector元素方法的效率比较(转)
  8. python在不同系统代码区别_python不同系统中打开方法
  9. FCPX插件 画笔记号标注工具 Pixel Film Studios PROPEN v1.0.3激活版
  10. 常用windows系统的100个dos命令
  11. 计算机cpu的介绍,CPU的详细介绍
  12. C#winform 控件鼠标落下变色,鼠标挪开恢复原色
  13. 对 concurrency-made-easy 文章的总结
  14. 下单后,订单拆单能怎拆?
  15. 网易云热歌榜歌名与热评的高频词抓取及词云制作
  16. 【UNR #6 C】稳健型选手(分治)(主席树)(二分)
  17. Mybatis 直接执行SQL
  18. airpods二代降噪吗_华强北 苹果二代三代 蓝牙耳机。最新款airpods 不跳电,真降噪。...
  19. 七牛云数据迁移到网易nos
  20. scrollHeight实测

热门文章

  1. 二叉平衡树复杂度!!!
  2. CentOS 8 如何更换yum源
  3. 行测-言语理解与表达-逻辑填空
  4. 生产注意事项(分片集群)
  5. Ajax学习一 创建Ajax对象(高洛峰)
  6. 5月30日第壹简报,星期一,农历五月初一
  7. 将一个32bit的数据,颠倒过来,bit0与bit31交换,bit1与bit30交换,C语言实现与verilog实现。
  8. 【SVAC1】SVAC1.0场解码相关分析
  9. 《今日头条中视频搬运项目》3-5天就可以产生利润【教程目录】
  10. 所谓“螺旋方阵”,是指对任意给定的N,将1到N×N的数字从左上角第1个格子开始,按顺时针螺旋方向顺序填入N×N的方阵里。本题要求构造这样的螺旋方阵。