天天看点

《Swift iOS应用开发实战》——2.4 理解iOS 8的视图和窗口

本节书摘来自华章计算机《swift ios应用开发实战》一书中的第2章,第2.4节,作者:刘铭 著, 更多章节内容可以访问云栖社区“华章计算机”公众号查看。

在前面几节的学习中我们已经为calculator项目创建了用户界面,其中使用了视图、label和button控件,接下来我们将详细了解有关视图和窗口的概念。

2.4.1 视图概述

视图属于可视化对象,多个视图组合起来就组成了ios应用程序的用户界面。视图本质上反映的是屏幕上的一块特定的矩形区域内所发生的事情,例如,根据用户的交互进行可视化方面的更新。所有视图都是uikit框架中的uiview类的子类,例如uilabel、uiimageview、uibutton和uitextfield都是它的子类。

另外一个比较特别也比较重要的uiview子类就是uiwindow。

2.4.2 uiwindow类

如果你之前开发过windows或os x平台的桌面应用程序,肯定会非常熟悉窗口的概念。一个典型的桌面应用程序会有多个窗口,每个窗口都会有标题栏,并且在标题栏中还会有一些控制按钮,负责窗口的关闭、最大化与最小化。这里的窗口,简单来说只是提供了在屏幕上的一个“面”,应用程序在这个“面”上向用户呈现信息和交互的控件。

基于ios的uiwindow类也提供了相同的功能:为视图组件的显示提供“面”。但是与桌面应用程序之间的不同在于ios应用程序通常只能有一个窗口,并且这个窗口必须充满整个屏幕,也没有我们在桌面应用程序中所熟悉的标题栏。

uiwindow也是uiview的子类,而且它位于整个应用程序视图层次的最顶端。用户根本无法看到也不能直接与uiwindow对象进行交互,甚至它本身在一般情况下都是由ib自动创建的。

2.4.3 视图的层次

构建ios 8应用程序的用户界面使用了分层的方式,不同的视图通过父/子关系相互联系。位于这个层次中最顶端的视图是uiwindow对象,然后添加其他类型的视图对象。在本章之前我们设计的用户界面包括1个窗口、1个视图、1个标签和17个按钮。用户界面的视图层次可以用图2-14来表示。

《Swift iOS应用开发实战》——2.4 理解iOS 8的视图和窗口

从图2-14中我们可以发现,uiwindow对象是uiview对象的父视图,而uiview则是uiwindow的子视图。同理,uilabel和uibutton则是uiview的子视图。子视图只有一个直接父视图,而一个视图则可以有多个子视图。

另外,视图层次结构可以嵌套更多层级的视图结构,比如我们可以设计下面的层次结构,如图2-15所示。但是为了简化界面,calculator项目并没有使用这样的层次结构。

《Swift iOS应用开发实战》——2.4 理解iOS 8的视图和窗口

视图的层次结构可以有效地帮助开发者组织和管理复杂的用户界面。很明显,子视图总是出现在其父视图的上面。可以想象,当calculator运行的时候,uilabel总是出现在uiview的上面。不仅如此,当父视图大小发生变化的时候(视图大小改变通常是在屏幕发生旋转的时候),依据视图之间的相互关系子视图的大小和位置也会发生变化。

在calculator项目中uiwindow对象对用户来说是不可见的,因为它总是会被其上的uiview对象全部覆盖掉,然后在这个uiview上面显示uilabel和uibutton。

视图的层次同时也定义了交互事件的处理方式,称做 “响应链”。例如,一个子视图收到一个不能处理的事件,那么这个事件就会被传递到它的即时父视图对象。如果父视图也不能处理该事件,则继续传递给它的父视图。就这样层层传递,直到某个视图对象可以处理这个事件为止。

2.4.4视图的类型

uikit框架包含了各种视图对象,可以分为以下几类。

(1)窗口

窗口(the window)特指前面所介绍的uiwindow类,它是整个视图层次中的根视图(root view),并且为所有需要绘制的子视图提供一个“面”。

(2)容器视图

与普通的视图对象相比,容器视图(container view)增加了一些功能,比如,uiscrollview类就提供了滚动条和滚动功能。

(3)控件

控件类(controls)所包含的视图既可以呈现信息又可以响应用户的交互。控件类都继承自uicontrol类(uicontrol继承自uiview),如按钮、滑动块、开关等。

(4)显示视图

显示视图(display views)与控件差不多,但它只能呈现反馈的可视化信息,并不能响应用户的交互,比如uilabel和uiimageview类。

(5) 文本和网页视图

uitextview和uiwebview这两个类都能够显示特定格式的信息给用户,比如uiwebview可以显示html格式的内容。

(6)导航视图和标签栏

导航视图(navigation views)和标签栏(tab bars)提供了让用户在程序中进行视图导航的机制,比如电话程序和邮件程序。

(7)警告视图

警告视图(alert views and action sheets)的设计目的是当有紧急或重要信息的时候提醒用户注意,它们还提供了可选的按钮让用户决定如何进行后面的操作。uialertview会在屏幕中央的位置显示一个消息框,uiactionsheet则会从屏幕的下方滑入。

继续阅读