IOS屏幕自动旋转和调节大小.doc_第1页
IOS屏幕自动旋转和调节大小.doc_第2页
IOS屏幕自动旋转和调节大小.doc_第3页
IOS屏幕自动旋转和调节大小.doc_第4页
IOS屏幕自动旋转和调节大小.doc_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

iOS开发7:自动旋转与调整大小苹果的产品iPad和iPhone都是支持自动旋转的,因而我们写的程序也要支持两种视图:纵向和横向。默认情况下,我们写的程序都是纵向的,就像前边的几个例子中那样。如果运行以前写的程序,当把模拟器旋转,你会发现很不友好,有的控件看不见了。这个时候,自动旋转就显得很有必要了。1、我们先不谈如何实现自动旋转,先讲讲如何让程序知道它支持哪几种旋转。运行Xcode 4.2,新建一个Single View Application,程序名为RotateTest,其他设置如下图:创建好工程后,打开的第一个页面包含如下视图:我们可以在这里设置程序支持哪种旋转,只需选中那个按钮。从上图可以看出,默认情况下,iPhone程序不支持倒过来的旋转,因为如果视图是倒过来的,而此时突然来电话,那么会很不方便,因为页面依然是倒过来的。但是,如果你创建了一个iPad程序,你回发现上图四个按钮都是选中的,即iPad程序默认支持所有旋转。注意,如果为程序创建了多个View Controller,那么每个View Controller都要可以设置所支持的旋转,不过,新建的View Controller设置的值必须是主View Controller的子集。其实,我们修改上图中的按钮,实质上修改的是我们程序的plist文件,在这个工程中,是RotateTest-Info.plist文件,如下图,展开这个文件,最下面显示的就是所支持的旋转:上面是设置支持选中的一种方法。我们也可以在代码中设定所支持的旋转。打开ViewController.m,找到shouldAutorotateToInterfaceOrientation方法,完整代码如下:- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation / Return YES for supported orientations return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);上面的代码表明,不支持倒转(UIInterfaceOrientationPortraitUpsideDown)。iOS中定义了四个表示方向的变量:UIInterfaceOrientationPortraitUIInterfaceOrientationPortraitUpsideDownUIInterfaceOrientationLandscapeLeftUIInterfaceOrientationLandscapeRight如果iOS设置旋转了,程序就会调用这个方向,如果返回YES就旋转视图,否则的话就不旋转。如果你建立了一个iPad程序,这个方法就是简单的返回YES。2、既然我们已经让程序知道支持什么旋转了,下面讲讲如何实现。在iOS中有三种方法可以实现自动旋转。(1)最简单的方法就是利用Xcode中的Size Inpector:(2)在View所对应的ViewController.m中重写willAnimateRotationToInterfaceOrientation方法,在这个方法中重新设置控件的大小与位置。(3)再新建一个视图,这样,我们有两个视图了,一个纵向,一个横向。在这两个视图上设计好了之后,当旋转时根据旋转方向,调用相应的视图。3、以下是这三个方法的简单使用。3.1 使用Size Inpector实现自动旋转: 单击ViewController.xib,在打开的视图区域拖放两个Button在上面,分别命名为“按钮上”和“按钮下”,页面布局如下图:图中两个按钮在水平方向上是居中放置的。 运行程序,并将模拟器旋转,对比一下旋转前后的效果:旋转之后,“按钮下”不见了。不过,“按钮上”的坐标和大小其实是没变的。我现在想实现旋转之后两个按钮还是水平方向居中,并且还是一个在顶端、一个在底端。为实现这个,我要做以下工作: 在View中选中“按钮上”,打开Size Inspector,把左边的红实线改成虚线: 在View中选中“按钮下”,打开Size Inspector,把左边和上边的红实线改成虚线,下边的红虚线改成实线:外围的红实线表示距离不变,例如上图右中下方的红实线就表示对应的控件与下方的距离不变,而其他方向会自动调整。现在运行一下并旋转模拟器,看看效果:3.2 重写willAnimateRotationToInterfaceOrientation方法,重新设置控件的大小与位置 首先先给这两个按钮添加Outlet映射到ViewController.h,名称分别是button_1和button_2: 在ViewController.m中的end之前添加以下代码:- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval) duration if (UIInterfaceOrientationIsPortrait(toInterfaceOrientation) button_1.frame = CGRectMake(124, 20, 72, 37); button_2.frame = CGRectMake(124, 403, 72, 37); else button_1.frame = CGRectMake(20, 131, 72, 37); button_2.frame = CGRectMake(388, 131, 72, 37); 运行,看看效果:3.3 创建新视图,旋转时切换视图: 我们先创建原始视图的副本,但是还是在原来的ViewController中。单击ViewController.xib,打开IB,在左边的三个图标中选中View图标,如果用的是Mac Book,那么按住Control键,如果是虚拟机,请按住Alt键。按住后按住鼠标左键,往下拖,鼠标会变成绿色的加号。注意新视图跟原始图是并列的,所以你要往正确的方向拖,然后松开鼠标,这样就创建了原来视图的副本: 调整新视图为横向(Landscape):选中新视图,打开Attribute Inspector,在Orientation中选择Landscape: 调整新视图中的按钮的位置,你可以按照自己的喜好设置,这里设置成如下所示: 下面,我们为这两个View建立Outlet映射,注意是View,而不是View上的控件。建立映射的方法都是一样,两个名称分别是portrait和landscape: 单击ViewController.m,在implementation那行代码的下一行添加以下语句:#define degreesToRadians(x) (M_PI*(x)/180.0) 修改willAnimateRotationToInterfaceOrientation方法,如下:- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration if (toInterfaceOrientation = UIInterfaceOrientationPortrait) self.view = self.portrait; self.view.transform = CGAffineTransformIdentity; self.view.transform = CGAffineTransformMakeRotation(degreesToRadians(0); self.view.bounds = CGRectMake(0.0, 0.0, 320.0, 460.0); else if(toInterfaceOrientation = UIInterfaceOrientationLandscapeLeft) self.view = self.landscape; self.view.transform = CGAffineTransformIdentity; self.view.transform = CGAffineTransformMakeRotation(degreesToRadians(-90); self.view.bounds = CGRectMake(0.0, 0.0, 480.0, 300.0); else if(toInterfaceOrientation = UIInterfaceOrientationLandscapeRight) self.view = self.landscape; self.view.transform = CGAffineTransformIdentity; self.view.transform = CGAffineTransformM

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论