Cocoa Touch 层

时间:2021-11-28 23:38:35

Cocoa Touch层包含创建 iOS应用程序所需的关键框架。上至实现应用程序可视界面,下至与高级系统服务交互,都需要该层技术提供底层基础。在开发应用程序的时候,请尽可能不要使用更底层的框架,尽可能使用该层的框架。

高级特性

下面章节描述一些常见特性,也许您也正打算在应用程序支持这些特性。

多任务

如果应用程序构建于iPhone SDK 4.0及其后续版本(且运行于iOS 4.0及后续版本操作系统),则点击Home键的时候,应用程序不会结束,而是切换到后台。对于大多数应用程序来说,进入后台,它们就会进入挂起状态。让应用程序驻留在后台可以避免以后的重新启动过程,应用程序可以直接将自己激活,这在很大程度上改善了整体用户体验。另外,将应用程序挂起也可以改善系统性能,因为挂起应用程序可以最小化电能使用,并可让前台应用程序获得更多的执行时间。

尽管应用程序进入后台就会被挂起,但可以通过下述的技术让其在后台继续运行:

  • 应用程序可以请求一定的时间完成某些重要的任务。

  • 应用程序可以声明自身支持的某种服务需要获得定期后台执行时间。

  • 应用程序可以使用本地通告在指定时间向用户发通知。这种方式对于应用程序是否运行没有要求。

不管应用程序是被挂起还是在后台运行,支持多任务不需要付出额外的工作。但是在某些情况(例如内存不足)下,应用程序可能会被结束运行。因此,应用程序应该可以在任何时候退出。这就意味着许多在退出应用程序时需要执行的任务必须改为在应用程序切换到后台的时候执行。这就要求您在应用程序委托中实现一些新的方法以响应程序的状态切换。

如果需要进一步了解如何对后台状态切换进行处理以及如何让应用程序在后台继续运行,请查看iOS应用程序编程指南

数据保护

和敏感用户数据打交道的应用程序可以使用设备内建加密功能(有些设备可能不提供内建加密功能)对数据进行保护。如果应用程序指定某个文件受保护,系统会以加密格式将该文件保存在磁盘。当设备锁住的时候,您的应用程序以及其他潜在的闯入者都不能访问该文件,而当用户解锁设备后,系统会生成一份密钥以便您的应用程序就访问该文件。

如需实现数据保护,应用程序应在待保护数据的创建和管理方式下一些功夫。它必须能够在数据创建之时保证其安全,而且需要适配设备上锁或未上锁造成的文件可访问性的变化。

如需进一步了解应用程序如何为文件添加数据保护,请查看iOS应用程序编程指南中的实现标准的应用程序行为一章。

苹果推送通知服务

iOS 3.0及后续版本的系统中,不管应用程序是否运行,苹果推送通知服务可用于通知用户某个应用程序具有新信息。利用这项服务,您可以向系统推送文本通知,可以触发声音提醒或者在应用程序图标上添加一个数字化标记。这样用户就知道他们应该打开应用程序接收相关信息。

从设计角度看,让应用程序支持推送通知包含两个部分。首先,iOS应用程序需要请求系统向其发送通知,然后要合理配置应用程序委托使其可以对通知进行恰当处理。这些工作可以通过应用程序委托以及UIApplication对象合作完成。第二,您需要提供一个服务器端进程用于产生最初的通知。该进程运行在您自己的本地服务器,它和苹果推送通知服务协同工作以产生最初的通知。

如需进一步了解如何配置应用程序以便使用远程通知,请查看本地通知及推送通知编程指南。 

本地通知

iOS 4.0引入了本地通知。本地通知是对已有推送通知的补充,通用程序可以通过它在本地生成通知,不再需要依赖外部服务器。当有重要的事件发生时,后台应用程序可以利用本地通知获得用户关注。举个例子,运行于后台的导航应用程序可以使用本地通知提醒用户要转弯。应用程序也可以安排在未来的某个时刻向用户发送本地通知,而且发送这些通知并不要求应用程序处于运行状态。

本地通知的优点是它独立于您的应用程序。一旦某个通知被安排好后,系统会负责通知发送。而且在发送通知的时候,您的应用程序无需处于运行状态

如需进一步了解本地通知的使用方式,请查看本地通知及推送通知编程指南

手势识别器

iOS 3.2引入了手势识别器。手势识别器是一个绑定到视图的对象,用于检测常见的手势类型。将手势识别器绑定到视图后,您可以告诉它某个手势发生的时候执行何种动作。之后,手势识别器就可以对原始事件进行跟踪,根据系统定义的试探方式识别手势。在引入手势识别器前,如果要识别一个手势,您需要跟踪视图的原始触摸事件流,然后再使用复杂的试探方法来判断这些事件是否表示某种手势。

现在,UIKit框架中包含一个UIGestureRecognizer 类,它定义了所有手势识别器的基本行为。您可以使用自定义的手势识别器子类或者系统定义的某个子类处理下面这些标准手势:

  • 拍击 (任意次数的拍击)

  • 向里或向外捏 (用于缩放)

  • 摇动或者拖拽

  • 擦碰 (以任意方向)

  • 旋转 (手指朝相反方向移动)

  • 长按

如需进一步了解您可以使用的手势识别器,请查看iOS事件处理指南

文件共享支持

应用程序可以使用文件共享让用户访问程序的用户数据文件。文件共享允许应用程序通过iTunes向用户显露应用程序/Documents目录的内容。这样,用户就可以在iPad和桌面计算机来回移动文件。但是,该功能不允许应用程序和同一设备上的其他应用程序共享文件。如果希望在程序间共享文件,请使用剪贴板或者文档交互控制器对象。

您可以通过如下步骤来让应用程序支持文件共享:

  1. 在应用程序的Info.plist文件中添加UIFileSharingEnabled键,并将键值设置为YES

  2. 将您希望共享的文件放在应用程序的Documents目录。

  3. 一旦设备插入到用户计算机,iTunes 9.1就会在选中设备的Apps标签中显示一个File Sharing区域。

  4. 此后,用户就可以向该目录添加文件或者将文件移动到桌面计算机中。

如果应用程序支持文件共享,当文件添加到Documents目录后,应用程序应该能够识别并做出适当响应。例如说,应用程序可以将新文件的内容显示界面上。请不要向用户展现目录的文件列表并询问他们希望对文件执行什么操作。

如需进一步了解 UIFileSharingEnabled键,请查看信息属性列表参考

点对点服务

在iOS 3.0 及后续版本,Game Kit框架支持经由蓝牙进行点对点连接。您可以使用点对点连接启动与某个邻近设备的通讯会话,也可用它实现多种多玩家游戏的常见特性。虽然点对点连接主要应用于游戏,但您也可将之应用于其他类型应用程序。

如需进一步了解如何在应用程序中使用点对点连接的特性,请查看Game Kit 编程指南。如果需要概要了解Game Kit框架,请查看“Game Kit 框架”。

标准系统视图控制器

Cocoa Touch层许多框架含有展现标准系统界面的视图控制器。我们提倡您在应用程序中使用这些视图控制器,这样可以让您的程序和系统具有一致的用户体验。如果您需要执行下述任务,请从相应的框架中选择一个视图控制器使用:

  • 显示或者编辑联系人信息 - 请使用Address Book UI框架中的视图控制器。

  • 创建或者编辑日历事件 - 请使用Event Kit UI框架的视图控制器。

  • 创建email或者SMS消息 - 请使用Message UI框架中的视图控制器。

  • 打开或者预览一份文件的内容 - 请使用UIKit框架中的UIDocumentInteractionController类。

  • 从用户的照片库选取一张照片 - 请使用UIKit框架中的 UIImagePickerController 类。

  • 拍摄视频片段 - 请使用UIKit框架中的UIImagePickerController类。

如需了解如何选择使用视图控制器,请查看iOS视图控制器编程指南。如需了解特定视图控制器所展现的界面,请查看相应的框架参考。

外部设备支持

安装iOS 3.2的设备可通过一组设备支持的线缆连接一个外部显示设备。当外部设备连上后,应用程序就可以使用其显示屏显示内容。屏幕的信息,包括屏幕能够支持的分辨率都可通过UIKit框架的接口获取。您也可以通过该框架将应用程序窗口关联到某个屏幕。

  • UIScreen 类用于获取当前所有屏幕(包括设备主屏幕)的屏幕对象。屏幕对象包含屏幕的属性信息(包括将屏幕的尺寸和像素比例也考虑在内的屏幕特征)。

  • 您可以从UIScreenMode 类获得某个具有特定尺寸像素比例的屏幕的信息。

  • 您可以将窗口(使用UIWindow类来表示)指定到某个特定的屏幕。如果您需要对内容作镜像显示,则需要提供两个独立的窗口,然后再在其中显示相同内容。

如需进一步了解上述类可提供的支持,请查看UIKit框架参考中相应的类描述。

Cocoa Touch 层包含的框架

下面部分描述Cocoa Touch层包含的框架以及这些框架提供的服务。

Address Book UI 框架

Address Book UI 框架(AddressBookUI.framework)是一套Objective-C的编程接口,可以显示创建或者编辑联系人的标准系统界面。该框架简化了应用程序显示联系人信息所需的工作,另外它也可以确保应用程序使用的界面和其他应用程序相同,进而保证跨平台一致性。

如果需要进一步了解Address Book UI框架以及如何使用该框架,请查看iOS地址簿编程指南以及iOS地址簿框架参考

Event Kit UI 框架

iOS 4.0引入了Event Kit UI框架(EventKitUI.framework),它提供一个视图控制键可以展现查看并编辑事件的标准系统界面。Event Kit框架(查看“Event Kit框架”可获得该框架的进一步信息)的事件数据是该框架的构建基础。

如需进一步了解Event Kit UI框架类和方法,请查看Event Kit UI框架参考

Game Kit 框架

iOS 3.0引入了Game Kit框架(GameKit.framework)。该框架支持点对点连接及游戏内语音功能,您可以通过该框架为应用程序增加点对点网络功能。点对点连接以及游戏内语音功能在多玩家的游戏中非常普遍,不过您也可以考虑将其加入到非游戏应用程序。此框架通过一组建构于Bonjour之上的简单而强大的类提供网络功能,这些类将许多网络细节抽象出来,从而让没有网络编程经验的开发者可以更加容易地将网络功能整合到应用程序。

如需进一步了解Game Kit框架, 请查看Game Kit 编程指南以及Game Kit 框架参考 。

iAd 框架

iOS 4.0引入了iAd框架 (iAd.framework)。您可以通过该框架在应用程序中发布横幅广告。广告会被放入到标准视图,您可以将这些视图加入到用户界面,并在合适的时机向用户展现。这些视图和苹果的公告服务相互协作,自动处理广告内容的加载和展现,同时也可以响应用户对广告的点击。

如需进一步了解如何在应用程序当中使用iAd,请查看iAd 框架参考

Map Kit 框架

iOS 3.0导入了 Map Kit框架 (MapKit.framework) ,该框架供一个可被嵌入到应用程序的地图界面,该界面包含一个可以滚动的地图视图。您可以在视图中添加定制信息,并可将其嵌入到应用程序视图,通过编程的方式设置地图的各种属性(包括当前地图显示的区域以及用户的方位)。您也可以使用定制标注或标准标注(例如使用测针标记)突出显示地图中的某些区域或额外的信息。

在iOS 4.0系统中,该框架开始支持可拖动标注以及定制覆盖层。可拖动标注允许您通过编程方式或通过用户交互方式重定位某个标注的位置。覆盖层可用于创建多个点组成的复杂地图标注。地图表面诸如公交路线、选举地图、公园边界或者气象信息(例如雷达数据)等可以使用覆盖层进行显示。

如需进一步了解Map Kit框架中的类,请查看Map Kit 框架参考

Message UI 框架

iOS 3.0引入了Message UI框架 (MessageUI.framework)。您可以利用该框架撰写电子邮件,并将其放入到用户的发件箱排队等候发送。该框架提供一个视图控制器界面,您可以在应用程序中展现该界面,让用户通过该界面撰写邮件。界面的字段可以根据待发送信息的内容生成。例如您可以设置接收人、主题、邮件内容并可以在邮件中包含附件。这个界面允许用户先对邮件进行编辑,然后再选择接受。在用户接受邮件内容后,相应的邮件就会放入用户的发件箱排队等候发送。

在iOS 4.0及其后续的系统中,该框架提供一个SMS撰写面板控制器。您可以通过它在应用程序中直接创建并编辑SMS信息(无需离开应用程序)。和电子邮件撰写界面一样,该界面也允许用户先编辑SMS信息再发送。

如需进一步了解Message UI框架中的类,请参考Message UI 框架参考

UIKit 框架

UIKit框架 (UIKit.framework)的Objective-C编程接口为实现iOS应用程序的图形及事件驱动提供关键基础。iOS系统所有程序都需要通过该框架实现下述核心功能:

  • 应用程序管理

  • 用户界面管理

  • 图形和窗口支持

  • 多任务支持

  • 处理触摸及移动事件。

  • 代表标准系统视图和控件的对象

  • 文本和web内容相关操作

  • 剪切、复制以及粘贴

  • 使用动画显示用户界面内容

  • 通过URL方式将其他应用程序整合到系统

  • 苹果推送通知服务支持,请查看“苹果推送通知服务 ”

  • 为残疾用户提供辅助功能

  • 本地通知的调度和发送

  • 创建PDF

  • 使用定制输入视图(其行为类似系统键盘)

  • 创建和系统键盘进行交互的定制文本视图

除了链编至应用程序的基础代码,UIKit还为下述和设备紧密相连的功能提供支持:

  • 加速器数据

  • 内置相机(存在相机的设备)

  • 用户的图片库

  • 设备名称和模型信息

  • 电池状态信息

  • 距离感应器信息

  • 来自绑定听筒的远程控制信息

如需进一步了解UIKit框架的信息,请查看UIKit 框架参考