目标
这里将介绍自动旋转,要知道自动旋转的使用和实现。
内容
1.自动旋转的机制
自动旋转并不是对所有应用程序都适用。苹果的某些iPhone应用程序仅支持单方向模式。
而在iPad上应用程序在两个方向上都能很好的运行。
对于iPhone应用,基本原则是,如果自动旋转能够增强用户体验,那么应该将它添加到应用中。
对于iPad应用,应该添加自动旋转功能,除非有充分理由不这么做。
1.1自动旋转的实现方式
应用程序可以采用3种常用方法来管理旋转。具体使用哪种方法依界面的复杂度而定。
对于较简单的界面,可以为界面中的所有对象指定合适的约束。调整视图时,约束可以告诉iOS设备应该如何对控件进行调整。
2.选择视图支持的方向
创建一个应用来演示如何为应用选择支持方向,在界面构建之前,要先告诉iOS我们的视图支持自动旋转。有两种方式可以做到,既可以创建一个应用级的设置(这会告诉所有的视图控制器的默认支持方向),也可以为每个独立的视图控制器设置旋转支持。
2.1应用级支持的方向
首先,需要指定应用程序所支持的屏幕方向。在新的Xcode项目窗口出现后,应该已经打开了项目设置。如果没有打开,点击项目导航面板中的第一行(以项目名称命名的那一项),然后确保位于General界面中。在提供的选项中,应该可以看到有一部分的标题为Development Info,其中包含了一组名为Device Orientation复选框。
这就是指定应用程序所支持方向的方法。这并非意味着应用中的每一个视图都要支持被选中的方向,但如果想要让所有应用程序视图都支持某个方向,就必须在这里选中应该方向。
按下Command+R构建并运行应用。
当应用在模拟器中出现之后,试着使用Command+左方向键 或 Command+右方向键 来旋转模拟器。
2.2单个控制器的旋转支持
现在对视图控制器进行配置,使它支持不同方向(应用级支持方向的子集)。注意到我们在应用的全局配置中指定应用所支持方向的绝对上限。如果全局不支持Upside-Down方向,那个任何一个视图控制器都不能迫使系统旋转到Upside-Down方向。在视图控制器做的就是在可接受的范围内做进一步的限制。
单击ViewController.m中,在这里实现一个UIViewController中定义的方法,这个方法可以指定当前视图控制器所支持的方向。
这个方法可以使用C语言风格的掩码返回所支持的方向。
UIApplication.h定义了如下的方向掩码,可以使用之前是提到的OR操作符任意组合这些掩码:
UIInterfaceOrientationMaskPortrait
UIInterfaceOrientationMaskLandscapeLeft
UIInterfaceOrientationMaskLandscapeRight
UIInterfaceOrientationMaskPortraitUpsideDown
除此之外,还有几个预定义的通用组合值。同样可以用OR操作符进行组合,为了是节省敲代码的时间,而且可以让代码可读性更好:
UIInterfaceOrientationMaskLandscape
UIInterfaceOrientationMaskAll
UIInterfaceOrientationMaskAllButUpsideDown
单词很简单,就不解释了。
3.使用约束设计界面
使用约束的好处之一就是,编写少量的代码就可以完世大量的工作。
虽然仍需要在代码中指定支持的方向,但是其余的自动旋转相关实现可以在界面构建器中完成。
基于Single View Application模板创建一个项目.选中Mian.storyboard文件,在界面构建器中编辑界面。
从对象库中拖出4个标签放置到视图上,同时修改名称,布局如下图:
现在已经指定了支持的方向但是还没设置自动旋转相关特性,先运行一个看看。
当应用程序出现在模拟器中后,按Command+“->”旋转模拟器,看到如下图所示:
发现所有的东东不对劲。不是我们想要的结果。
怎么解决这个问题呢?
我们可以增加一些规则,来使这些标签找到自己的位置。
1)选中所有标签:
2)全部选中之后,在菜单中点击Editor》Resolve Auto Layout Issues》Add Missing Constraints选项:
增加约束之后:
可以发现,标签下面出现了Constraints条目,这些就是约束,对应视图界面上的蓝色的引导线。每一条蓝线代表一个约束。
现在再来运行一下,旋转模拟器,如下图:
效果基本是实现了。但是顶部的标签还不是等宽的。等下解决这个问题。
来分析一下,按下option+command+5打开尺寸检查器(size inspector),可以看到里面包含了约束的列表和参数。
使顶部的标签等宽
1)选中顶部的两个边框,UL和UR。
2)增加等宽的约束。
从菜单中选择Editor》Pin》Widths Equally创建新的约束。
增加新的约束后可以看到:
再次运行应用,并旋转模拟器,可以看到:
可以说自动布局就先到这。
4.旋转时重构视图
接下来学习使用代码控制布局,手动确定每个组件的开关和尺寸,构造一个在纵向模式和横向模式切换时尺寸会有变化的布局。
4.1设计界面
按下图所示,设计好界面:1个UIView,4个UIButton。
4.2 创建并关联输出接口
将这5个控件都关联到输出接口,在ViewController.m文件顶部:
4.3旋转时移动按钮的代码
小结
学习了自动旋转和自动布局。