(译)Getting Started——1.2.2 Desinging a User Interface(设计用户界面)
用户需要以最简单的方式与应用界面进行交互。应该从用户的角度出发设计页面,使得界面更高效、简捷和直接。
storyboard以图形化的方式帮助你设计和实现界面。在设计和实现界面的过程中,你可以准确的看到你实现的界面是什么样的,界面上哪些东西合适,哪些东西不合适,以及你对界面随时的调整,都是一目了然的。
当你使用storyboard构建界面时,正如你在上一节教程中学习的那样,你一直都在与视图(View)打交道,视图(View)用于把内容显示给用户。视图(View)是用于构建用户界面,用于有效地、优雅地、清晰地展示内容的基本单元。如果你正在开发更为复杂的应用,那你可以使用多个场景和多个View。


视图层次结构
屏幕上,视图不会显示自己,也不会响应用户的输入,它们只能提供一个用于放置其它视图的窗口。于是,应用里的视图是由被称为视图层次结构的东东所管理的。视图层次结构定义了相对于其它视图的视图布局。在一个层次结构中,被包含在其它视图里的视图被叫做子视图,包含其它视图的视图被叫做父视图。即使一个视图里有多个子视图,它也只有且仅有一个父视图。
视图层次结构的顶层对象是window对象。它是UIWindow类的实例,它是屏幕上用于添加视图对象的基本容器。为了显示内容,你需要给window添加内容视图对象(内容视图对象作为window的子视图)。
内容视图和它的子视图对于用户来说,是可见的,内容视图也必须被插入到window的视图层次结构中。在你使用storyboard时,放置内容视图的位置已经为你自动配置好了。在应用被启动时,应用对象会加载storyboard,会创建有关的视图控制器类的实例,解压每个视图控制器里的视图层次,然后把作为开始的视图控制里的视图内容添加到window中。在下面的章节中,你会学习到如何管理视图控制器。现在,你需要把焦点聚集到如何在storyboard的单视图控制器中创建一个层次结构。
视图的类型
在你设计应用时,了解哪种意图下使用哪种视图是非常重要的。例如,如果你想收集用户的信息(比如是一段文本),你可以使用text field,如果你要显示一段静态的文字,你应该使用label。应用绘制时,使用UIKit框架的视图是比较容易创建的,这是因为你可以使用它们快速的装配出基本的界面来。一个UIKit框架的视图对象是UIView类或子类的实例。UIKit框架提供了不同类型的视图用于帮助你表现和组织数据。
尽管每个视图都有它自己特定的功能,但是总的来说,UIKit视图可以被归为这么几种类型:
| 视图类型 | 意图 | 举例 |
|
Content |
显示特定类型的内容,例如图片或文本 | Image view,label |
|
Collections |
显示集合或一组视图 | Collection view,table view |
|
Controls |
执行动作或显示信息 | Button,slider,switch |
|
Bars |
导航或执行动作 | Toolbar,navigation bar,tab bar |
|
input |
接收用户的文本输入 | search bar,text view |
|
Containers |
为其它视图提供容器 | View,scroll view |
| Modal | 中断应用正常的流程来让用户执行动作 | Action sheet,alert view |
你可以在Interface Builder中,用可视化的方式来装配视图。Interface Builder中提供了标准的view、control等库,这些东东在你构建界面时用得到。从这个库中拖出对象,把它们放置于画布中,然后用你自己的方式去安排它们。在保存之前,使用inspector来配置这些对象。你会马上看到结果,不需要写任何一行代码,你就可以运行程序了。
UIKit框架提供了标准的视图来显示各种类型的内容,你还可以继承UIView(或它的子类)来创建自己的视图。自定义的视图一定是UIView的子类,在自定义视图中,你需要自己处理所有的绘制事件,处理所有的事件句柄。在该教程中,你不会使用自定义视图,如果你有兴趣,你可以在Defining a Custom View一文中学习到如何实现自定义视图的更多知识。
使用storyboard放置视图
在可视化环境中,使用storyboard来放置自己的视图层次。storyboard提供了一个直接地、可视化地方式来让你操作视图,构建界面。
正如你在上一节教程中看到的那样,storyboard由场景组成,每个场景都关联着一个视图层次结构。从对象库中拖出一个视图并把它摆放在场景上,storyboard就会自动把它加入到当前场景的视图层次结构中。在视图层次结构中,视图的位置是由你决定的,你把视图放到哪里,它就在哪里显示。在你给场景添加完一个视图后,你可以在画布上对视图进行重设大小、配置、移动位置等操作。
画布上也可以显示界面上对象的视图大纲,它在画布的左边显示,你从大纲上就可以清楚的看到画布中对象的层次结构。


storyboard场景中创建的视图层次结构实际上是一系列被压缩的Objective-C对象。在运行时,这些对象被解压。解压的结果就是,你使用utility区域的inspector为相关类的实例设置的属性值的层次结构被展现出来。
正如你在上一节教程中学到的那样,在storyboard中,你工作的默认界面配置被应用为界面的各个版本。当你需要为特定的设备尺寸和方向调整你的界面时,你应该把这种变化指定给特定的尺寸类。尺寸类是在显示环境下,描述水平或垂直空间的高级方式,例如竖向的iPhone或横向的iPad。有两种类型的尺寸类:普通地、紧凑地。展示环境的特点是一对尺寸类,一个描述了水平空间,一个描述了垂直空间。在画布上,你可以使用尺寸类控制器,为普通尺寸和紧凑尺寸的结合来预览和编辑界面。


在本教程中,你没有在特定的尺寸下工作,但是,如果你对尺寸类很好奇,请阅读Size Classes Design Help章节。
使用Inspector来配置视图
utility区域,对象库上方的inspector面板中显示的内容如下:


每个inspector的元素都为界面上的元素提供了重要的配置选项。当你选择了一个对象(例如一个视图),inspector会根据你选择的对象,更新面板里的属性,你就可以对属性进行设置了。
1. File:指定storyboard的一般通用信息。
2. Quick Help:获取该对象相关的有用信息。
3. Identity:为该对象指定自定义的类,定义它可访问的属性。
4. Attributes:自定义对象的可视化属性。
5. Size:指定对象的尺寸和Auto Layout属性。
6. Connections:在界面和源码之间创建连接。
在前一节教程中,你使用了Attributes inspector。在教程剩下的部分中,你会继续使用其它的inspector来配置视图和对象。尤其是,使用Attributes inspector来配置视图,使用Identity inspector来创建视图控制器,使用Connections inspector在视图和视图控制器之间创建连接。
使用Auto Layout定位视图
当你在storyboard中开始定位视图时,你需要考虑各种各样的情况。IOS应用运行在数量众多的不同设备上,这些设备的屏幕尺寸不同,方向不同,语言不同等等。你需要动态的界面,当设备的屏幕尺寸、方向、本地化、度量等发生变化时,界面应该可以无缝的响应。
如果你已经学习了上一节教程,你会看到,Xcode提供了名为Auto Layout的工具来帮助你创建通用的、适配性强的界面。Auto Layout是解释视图之间关系的系统。在单个视图上或多个视图之间,它会让你定义一系列的约定。


点击画布右下方的Auto Layout图标,来给画布上的视图添加不同类型的约定,解决布局问题,检查用于约束行为的约定。
1.
Align:创建行或列的约束。例如把一个视图放置于容器的中间,或者把一个视图放于某两个视图的左边。
2.
Pin:创建空间约束。例如定义视图的高度,或者指定它离另外一个视图的水平距离。
3.
Resolve Auto Layout Issues:基于建议,通过添加或重设约束来解决布局问题。
4.
Resizing Behavior:指定大小重新设定后如何影响约束。
此时,对于在ToDoList应用中你创建的简单页面来说,你不需要学习Auto Layout中进一步的知识。因为,应用的界面很复杂,你就需要添加不同的约束来精确的指定,在不同的设备和方向下,界面应该如果摆放视图。在教程的最后,会有一个指向Auto Layout教程的链接,这个教程会帮助你使用约束来定义更为复杂的自适应的界面。
(译)Getting Started——1.2.2 Desinging a User Interface(设计用户界面)的更多相关文章
- [译]深入 NGINX: 为性能和扩展所做之设计
来自:http://ifeve.com/inside-nginx-how-we-designed-for-performance-scale/ 这篇文章写了nginx的设计,写的很仔细全面, 同时里面 ...
- [译]Java 程序员应该了解的 10 个面向对象设计原则
面向对象设计原则是OOPS(Object-Oriented Programming System,面向对象的程序设计系统)编程的核心,但大多数Java程序员追逐像Singleton.Decorator ...
- 浅析 - 提高xib(Interface Builder)高效工作的几个小技巧
本文译自:8 Tips for working effectively with Interface Builder(需FQ)先来看看目录:介绍使view的Size与view中的Content相适应按 ...
- 【最后一篇API译文】Android开发-API指南- Contacts Provider
Contacts Provider 今年加入了某字幕组,加之杂事颇多,许久未添新文了,惭愧之极. 在听闻 Google 即将重返中国后,近日忽又发现官方网站正在放出 API 中文版,比如本文.当然不是 ...
- [HIS] HIT行业常用名词及缩写定义
[HIS] HIT行业常用名词及缩写定义 1. EHR 居民个人电子健康记录 2. MPI 居民个人主索引 3. HIS 医院管理信息系统 4. CIS 医院临床信息系统 5. P ...
- DBA词典:数据库设计常用词汇中英文对照表
1. Access method(访问方法):此步骤包括从文件中存储和检索记录. 2. Alias(别名):某属性的另一个名字.在SQL中,可以用别名替换表名. 3. Alternate keys(备 ...
- Swift语言Auto Layout入门教程:上篇
原文:Beginning Auto Layout Tutorial in Swift: Part 1/2,译者:@TurtleFromMars 开始用自动布局约束的方式思考吧! 更新记录:该教程由Br ...
- 大家一起来找茬(BUG)
大家一起来找茬(BUG) ----------目录---------- 一.上手体验 1.主界面 2.功能 二.程序的 BUG 三.必应词典的 BUG 1."每日一句"里的句子不能 ...
- 摘自知乎--mysql
允许晚辈叫一声前辈.从前辈的描述中可以看出前辈对MySQL已经有很好的理解,但我还是想从我这个半知半解的晚辈角度提出几点. 1.系统学习数据库,最要紧的是把基本功打牢,所以<数据库系统概念 原书 ...
随机推荐
- iOS:quartz2D绘图小项目(涂鸦画板)
介绍:学了quartz2D的绘图知识后,我根据它的一些功能制作了一个小项目:涂鸦画板. 功能:绘制各种图形,还可以选取相册上的照片做涂鸦,然后保存到相册中.其中,还包括功能有:颜色的选取.线宽的选取. ...
- Synopsys EDA工具在LinuxMint 18(Ubuntu 16.04.2)安装注意事项
Synopsys家的工具官方对Linux发行版支持为RHEL 5/6/7及SUSE 12/13,对于2014版本的工具(DC.ICC.PT.VCS.HSPICE等).其实,在Debian系及衍生版本上 ...
- 流畅的python第九章符合Python风格的对象学习记录
对象表示形式 每门面向对象的语言至少都有一种获取对象的字符串表示形式的标准方式.Python提供了两种方式 repr()便于开发者理解的方式返回对象的字符串表示形式 str()便于用户理解的方式返回对 ...
- (转)scala apply方法 笔记
在akka源码中有这样一个Cluster类. 使用方法是这样的:val cluster = Cluster(context.system); 作为scala菜鸟的我,并没有找到Cluster(syst ...
- spring java 方式配置JedisPool Bean
来自一个开源项目https://git.oschina.net/geek_qi/ace-cache package com.ace.cache.config; import com.ace.cache ...
- WindowProc和DefWindowProc的差别
1. WindowProc是你给自己的窗体定义的窗体处理函数 DefWindowProc是windows平台提供的默认窗体处理函数 假设某些消息你不须要做特别的处理,调用DefWindowProc进行 ...
- TestNG 二、测试组
一.测试组 TestNG 允许你将测试方法归类为不同的组.不仅仅是可以声明某个方法属于某个组,而且还可以让组包含其他的组.这样TestNG可以调用或者请求包含一组特定的组 (或者正则表达式)而排除其他 ...
- JS 数字左补零函数
/* 左边自动补零 质朴长存法 by lifesinger */ function pad(num, n) { var len = num.toString().length; while(len & ...
- SQL Server中按照条件随机返回数据
需求:查询对应关键字的数据,并随机返回一条. 这时,需要一个SQL的那只方法:NEWID(). 用法: [sql]SELECT TOP 1 * FROM Table WHERE TID = 1 ORD ...
- static 关键字 静态属性与方法 -> :: self $this 区别 可见性的关键字区别
1.声明类属性或方法为静态,就可以不实例化类而直接访问.静态属性不能通过一个类已实例化的对象来访问(但静态方法可以). 2.由于静态方法不需要通过对象即可调用,所以伪变量 $this 在静态方法中不可 ...











