Cocoa Touch层
Cocoa Touch层包含了创建ios应用程序的关键框架。这个层定义了基本应用程序的基础,并为关键技术提供支持,譬如多任务机制、触摸式输入、推送通知和其他许多高级的系统服务。当你设计程序时,你应该首先查看这个层次的技术,如果它们能满足你的需要时。
高级的特征
接下来的部分描述了一些Cocoa Touch层中的关键技术。
Auto Layout
在iOS 6的介绍中,自动布局改进了先前用于编排用户接口元素的“springs and struts”模式。由于自动布局,你可以定义属于自己的布局规则。这些规则解释了一个较大的关系类,并且能够更直观地使用。举个例子,你可以指定一个按钮的位置是距离它父类视图左边缘的20个点。
用于自动布局的本质四Objective-C的对象,我们称之为约束。此方法给你带来很多好处:
· 仅仅通过交换字符串来实现本地化,而不是改造布局。
· 如希伯来语和阿拉伯语等语言的用户界面元素的镜像。
· 在视图中的对象和控制器布局中有更好的分层责任。
一个视图对象通常清楚知道它的标准大小,在父类视图中的位置,还有它相对于其他视图的位置。视图控制器可以覆写这些值,当需要一些不标准的东西时。
Storyboards
在iOS 5的介绍中,storyboards作为推荐的方式取代了nib文件来设计应用程序的用户界面。与nib文件不同,storyboards让你在一个地方设计全部的用户界面。所以你可以看到你的视图和视图控制器,还有它们如何一起运行。storyboards的一个重要的部分是定义segues的能力,这是从一个视图控制器转换到另一个的。应用程序可以在XCode中直观地定义这些转换,或者在XCode中有计划地开始它们。这些转换允许你捕捉除了内容外,还能捕捉用户界面的流量。
你可以使用一个单一的storyboard文件来保存应用程序的视图控制器和视图,或者你可以使用多种视图storyboard来组成界面的每个部分。在建立时,Xcode执行storyboard文件的内容并且把它划分成离散的文件,使它们能够被单独加载。虽然你的应用程序永远也不会需要直接操控这些离散文件。UIKit框架提供了方便的类来访问storyboard的内容。
Document Support
在ios 5的介绍中,UIKit框架介绍了UIDocument类来管理与用户文件相关的数据。该类使的基于文档的应用程序更加容易实现,尤其是在iCloud中保存了文档的应用程序。除了为文件相关的数据提供了保存容器,UIDocument类还提供了内置支持异步读写文档数据,安全保存文档,自动保存文档,支持iCloud的冲突检测和支持平台文件和头文件的表现等功能。为了使用Core Data的应用程序的数据模型,你可以使用UIManagedDocument子类来管理你的数据存储。
Multitasking
建立在iOS SDK 4.0或以后的应用程序在用户按下Home键时不会终止。取而代之的是,它们转移到后台去执行上下文。由UIKit定义的多任务处理支持能够帮助应用程序顺利地转移到后台状态。
为了节省电池,大多数的程序都会在进入后台后片刻便被系统挂起。被挂起的程序仍然存在在内存中但是却不会执行任何代码。这样的行为允许应用程序在重新启动时能够迅速恢复,与此同时又不消耗电量。然而,应用程序可能可能会因为几个原因而在后台继续运行:
· 应用程序可以要求在有限的时间内完成一些重要的任务。
· 应用程序可以声明自己为支持特定服务,从而需要定期后台执行时间。
· 应用程序可以在指定的时间使用本地通知来产生用户警报,不管有没有运行。
不管你的程序是挂起还是仍然在后台运行,支持多任务处理机制确实需要在你的部分额外添加。系统会通知你的应用程序当它过渡到后台时。这些通知点提示你执行一些重要的应用程序任务,例如保存用户数据。
Printing
在iOS 4.2的介绍中,UIKit printing提供了允许应用程序无线发送内容给附近的打印机。在大多数情况下,UIKit做着所有与打印相关的繁重任务。它管理着打印接口,和你的应用程序一起提供可打印的内容,处理进程还有在打印机上实施打印。
应用程序所提交的打印工作都会移交给打印系统。一台打印机上的所有打印作业都需要排队并且遵循先到先打的原则。用户可以从打印中心的应用得知打印作业的情况,甚至可以使用应用程序来取消打印作业。所有其他的打印方面均由系统自动处理。
Note:无线打印只能用于支持多任务处理的装置。只可以使用UIPrintInteractionController对象来检测设备是否可以打印你的应用程序。
UI State Preservation
在iOS 6的介绍中,状态保存使得应用程序更加容易保存用户最后一次使用时的用户界面。当应用移动到后台,它会被要求保存试图的语义状态和视图控制器。当重新启动时,应用会使用这个状态来恢复它的界面,使它看起来就像没有被关闭过一样。UIKit提供了保存和恢复应用界面的基础,并支持状态保存集成到它自身。
Apple Push Notification Service
在iOS 3.0的介绍中,Apple的推送消息服务提供了一种提醒用户有新消息的方式,甚至当你的应用程序并没有主动运行。使用这项服务,你可以在任意时间推送文本消息,给你的应用程序的图标增加一个标记,又或者在用户设备上触发声音警报。这些信息让用户知道他们应该打开你的应用程序来接收相关的信息。
从设计的角度来看,有两部分使得推送消息能在iOS应用程序上运行。第一,应用程序必须请求通知的传递和当通知传递过来时处理通知的数据。第二,你需要提供一个服务器端的进程来产生通知。这个进程在你自己的本地服务上,和Apple Push Notification一起触发通知。
Local Notifications
在iOS 4.0的介绍中,本地通知通过给予应用程序一个产生通知的途径来补充现有的消息推送机制,而不是依靠外来的服务器。在后台运行的应用程序可以使用本地通知,就像当重要的事件发生时需要获取用户的注意的方式。举个例子,一个在后台运行的导航程序可以使用本地通知来提醒用户是时候转弯了。应用程序也可以通过使用未来的时间点来传递本地通知,即使程序并没有运行。
本地通知的好处是它们独立于你的应用程序。一旦计划了一个通知,系统管理就会输送它,不管你的程序是不是运行着。
Gesture Recognizers
在iOS 3.2的介绍中,手势识别是你连接视图的对象,并且用来检测常见的手势类型。在连接手势识别和你的视图后,你可以告诉手势识别什么手势出现时应该执行什么动作。然后手势识别的对象会跟踪原始的触摸事件,应用系统定义好的试探法来检测给定的手势是什么类型的。没有手势识别的话,你必须自己完成这项十分复杂的工作。
UIKit包含了一个UIGestureRecoginzer类为所有手势识别定义了基础的行为。你可以定义你自己的手势识别的子类或者使用UIKit提供的子类来处理下面这些标准的手势:
-
Tapping (any number of taps)
-
Pinching in and out (for zooming)
-
Panning or dragging
-
Swiping (in any direction)
-
Rotating (fingers moving in opposite directions)
-
Long presses
Standard System View Controllers
External Display Support
在iOS 3.2的介绍中,外接显示器支持允许一些基于iOS的设备通过电缆与外部显示器连接。当连接时,相关的屏幕可以用来展示应用的内容。屏幕上的信息,包括其支持的分辨率,都是通过UIKit框架接口可以获取的。你也可以使用框架把你的程序桌面和屏幕连接起来。Game Kit Framework