Cocoa Touch层包含了构建iOS程序的关键framework。设计你的程序时,你应该首先查看这个层包含的技术,看看他们是否符合你的需要。
Cocoa Touch层包含了构建iOS程序的关键framework。这层定义了程序的基本结构,支持如多任务,基于触摸的输入,push notification等关键技术,以及很多上层系统服务。设计你的程序时,你应该首先查看这个层包含的技术,看看他们是否符合你的需要。
上层特性
下面介绍一些Cocoa Touch层的关键技术。
◆多任务
iOS SDK 4.0以及以后的SDK构建的程序(且运行在iOS 4.0和以后版本的设备上),用户按下Home按钮的时候程序不会结束;它们会挪到后台运行。UIKit帮助实现的多任务支持,让程序可以平滑切换到后台,或者切换回来。
为了节省电力,大多数程序进入后台后马上就会被系统暂停。暂停的程序还在内存里,但是不执行任何代码。这样程序需要重新激活的时候可以快速恢复,但是同时不浪费任何电力。然而,在如下原因下,程序也可以在后台下运行:
程序可以申请有限的时间完成一些重要的任务。
程序可以声明支持某种特定的服务,需要周期的后台运行时间。
程序可以使用本地通知在指定的时间给用户发信息,不管程序是否在运行。
不管你的程序在后台是被暂停还是继续运行,支持多任务都不需要你做什么额外的事情。系统会在切换到后台或者切换回来的时候,通知程序。在这个时刻,程序可以直接执行一些重要的任务,例如保存用户数据等。
◆打印
从iOS 4.2开始,UIKit引入了打印支持,允许程序把内容通过无线网路发送给附近的打印机。关于打印,大部分重体力劳动由UIKit承担。它管理打印接口,和你的程序协作渲染打印的内容,管理打印机里打印作业的计划和执行。
程序提交的打印作业会被传递给打印系统,它管理真正的打印流程。设备上所有程序的打印作业会被排成队列,先入先出的打印。用户可以从打印中心程序看到打印作业的状态。所有这些打印细节都由系统自动处理。
注意:仅有支持多任务的设备才支持无线打印。你的程序可使用UIPrintInteractionController对象来检测设备是否支持无线打印。
◆数据保护
iOS4.0起引入了数据保护功能,需要处理敏感用户数据的应用程序可以使用某些设备内建的加密功能(某些设备不支持)。当程序指定某文件受保护的时候,系统就会把这个文件用加密的格式保存起来。设备锁定的时候,你的程序和潜在入侵者都无法访问这些数据。然而,当设备由用户解锁后,会生成一个密钥让你的程序访问文件。
要实现良好的数据保护,需要仔细考虑如何创建和管理你需要保护的数据。应用程序必须在数据创建时确保数据安全,并适应设备上锁与否带来的文件可访问性的变化。
◆苹果推通知服务
从iOS 3.0开始,苹果发布了苹果推通知服务,这一服务提供了一种机制,即使你的程序已经退出,仍旧可以发送一些新信息给用户。使用这种服务,你可以在任何时候,推送文本通知给用户的设备,可以包含程序图标作为标识,发出提示声音。这些消息提示用户,应该打开你的程序接收查看相关的信息。
从设计的角度看,要让iOS程序可以发送推通知,需要两部分的工作。首先,程序必须请求通知的发送,且在送达的时候能够处理通知数据。然后,你需要提供一个服务端流程去生成这些通知。这一流程发生在你自己的服务器上,和苹果的推通知服务一起触发通知。
◆本地通知
从iOS 4.0开始,苹果推出了本地通知,作为推通知机制的补充,应用程序使用这一方法可以在本地创建通知信息,而不用依赖一个外部的服务器。运行在后台的程序,可以在重要时间发生的时候利用本地通知提醒用户注意。例如,一个运行在后台的导航程序可以利用本地通知,提示用户该转弯了。程序还可以预定在未来的某个时刻发送本地通知,这种通知即使程序已经被终止也是可以被发送的。
本地通知的优势在于它独立与你的程序。一旦通知被预定,系统就会来管理它的发送。在消息发送的时候,甚至不需要应用程序还在运行。
◆手势识别器
从iOS 3.2起,引入了手势识别器,你可以把它附加到view上,然后用它们检测通用的手势,如划过或者捏合。附加手势识别器到view后,设置手势发生时执行什么操作。手势识别器会跟踪原始的触摸事件,使用系统预置的算法判断目前的手势。没有手势识别器,你就必须自己做这些计算,很多都相当的复杂。
UIKit包含了UIGestureRecognizer 类,定义了所有手势识别器的标准行为。你可以定义自己的定制手势识别器子类,或者是使用UIKit提供的手势识别器子类来处理如下的标准手势:
◆点击(任何次数)
◆捏合缩放
◆平移或者拖动
◆划过(任何方向)
◆旋转(手指分别向相反方向)
◆长按
◆文件共享支持
文件共享支持是从iOS 3.2开始引入的,利用它程序可以把用户的数据文件开发给iTunes 9.1以及以后版本。程序一旦声明支持文件共享,那么它的/Documents目录下的文件就会开放给用户。用户可以用iTunes放文件进去,或者取出来。这一特性并不允许你的程序和同一设备里面的其他程序共享文件;那种行为需要用剪贴板,或者文本交互控制对象(UIDocumentInteractionController)来实现。
要打开文件共享支持,请:
◆在程序的Info.ppst文件内加入键UIFileSharingEnabled,值设置为YES。
◆把你要共享的文件放在程序的Documents目录内。
◆设备插到用户电脑时,iTunes在选定设备的程序页下面显示文件共享块。
◆用户可以在桌面上增加和删除文件。
支持文件共享的程序必须能够识别放到Documents目录内的文件,并正确的处理它们。例如,程序应该用自己的界面显示新出现的文件,而不是把这些文件列在目录里,问用户该如何处理这些文件。
◆点对点对战服务
从iOS 3.0起引入的Game Kit框架提供了基于蓝牙的点对点对战功能。你可以使用点对点连接和附近的设备建立通讯,是实现很多多人游戏中需要的特性。虽然这主要是用于游戏的,但是也可以用于其他类型的程序中。
◆标准系统View Controller
Cocoa Touch层的很多框架提供了用来展现标准系统接口的View Controller。你应该尽量使用这些View Controller,以保持用户体验的一致性。任何时候你需要做如下操作的时候,你都应该用对应框架提供的View Controller:
显示和编辑联系人信息◆使用Address Book UI框架提供的View Controller。
创建和编辑日历事件◆使用Event Kit UI框架提供的View Controller。
编写email或者短消息◆使用Message UI框架提供的View Controller。
打开或者预览文件的内容◆使用UIKit框架里的UIDocumentInteractionController类。
拍摄一张照片,或者从用户的照片库里面选择一张照片◆使用UIKit框架内的UIImagePickerController类。
拍摄一段视频◆使用UIKit框架内的UIImagePickerController类。
◆外部显示支持
iOS 3.2开始,引入了外部显示支持,允许一些iOS设备可以通过支持的缆线连接到外部的显示器上。连接时,程序可以用对应的屏幕来显示内容。屏幕的信息,包括它支持的分辨率,都可以用UIKit框架提供的接口访问。你也可以用这个框架来把程序的窗口连接到一个屏幕,或另外一个屏幕。
Cocoa Touch框架
下面的章节介绍Cocoa Touch层的框架和它们提供的服务。
Address Book UI框架
Address Book UI框架(AddressBookUI.framework)是一个Objective-C的编程接口,用来显示创建新联系人、编辑和选择已有联系人的标准系统界面。这个框架让你可以轻松的在程序里面显示联系人信息,同时确保你的程序使用和其他程序一样的接口,保持了平台的一致性。
更多关于Address Book UI框架的类和如何使用他们的信息,参见iOS Address Book UI框架参考手册。
Event Kit UI框架
从iOS 4.0开始,引入了Event Kit UI框架(EventKitUI.framework)提供了用来显示和编辑事件的view controller。
Game Kit框架
iOS 3.0引入了Game Kit框架(GameKit.framework)支持在程序中进行点对点的网络通讯。尤其是这个框架支持了点对点的连接和游戏内的语音通话功能。虽然这些功能主要是用于多人对战网络游戏,但是也可以在非游戏程序中使用。这个框架提供的网络功能是构建在Bonjour之上几个简单的类实现的。这些类抽象了很多网络细节,让没有网络编程经验的开发者也可以轻松地在程序中加入网路功能。
iAd框架
iOS 4.0引入了iAd框架(iAd.framework)支持程序中显示banner广告。广告由标准的view构成,你可以把它们插入到你的用户界面中,恰当的时候显示。View本身和苹果的广告服务通讯,处理一切载入和展现广告内容以及响应点击等工作。
Map Kit框架
iOS 3.0引入了Map Kit框架(MapKit.framework)提供了一个可以嵌入到程序里的地图接口。基于该接口的行为,它提供了可缩放的地图view,可标记定制的信息。你可以把它嵌入在程序的view里面,编程设置地图的属性,保存当前显示的地图区域和用户的位置。你还可以定义定制标记,或者使用标准标记(大头针标记),突出地图上的区域,显示额外的信息。
从iOS 4.0开始,这个框架加入可拖动标记和定制覆盖对象的功能。可拖动标记令你可以移动一个已经被放置到地图上的标记,编程,也可以通过用户行为。覆盖对象提供了创建比标记点更复杂的地图标记的能力。你可以使用覆盖对象在地图上来放置信息,例如公交路线,选区图,停车区域,天气信息(如雷达数据)。
Message UI框架
iOS 3.0引入了Message UI框架(MessageUI.framewok)提供了编写和查询发建箱消息的能力。编写支持包含了一个可以在程序中显示的view controller接口。你可以在接口中填写你要发送信息的内容。你可以设置收信人,主题和内容,以及附件。用户可以选择信息的优先级。选定后,信息就会在用户的发件箱里面排队等待发送。
iOS 4.0和以后的系统,这个框架开始支持用来编写短消息的view controller。你可以使用这种view controller来创建和编辑短消息,而不用离开程序。和邮件编写接口一样,这个接口让用户选择发送前是否编辑一下。
UIKit框架
UIKit框架(UIKit.framework)包含iOS中实现图形,事件驱动编程的等关键架构Objective-C编程接口。iOS中的每个程序都在使用这个框架来实现如下的核心特行:
◆应用程序管理
◆用户界面管理
◆图形和窗口支持
◆多任务支持
◆支持对触摸的处理以及基于动作的事件
◆展现标准系统view和控件的对象
◆对文本和web内容的支持
◆剪切,复制和粘贴的支持
◆用户界面动画支持
◆通过URL模式和系统内其他程序交互
◆支持苹果推通知
◆对残障人士的易用性支持
◆本地通知的预定和发送
◆创建PDF
◆支持使用行为类似系统键盘的定制输入view
◆支持创建和系统键盘交互定制的text view
除了提供程序的基础代码支持,UIKit还包括了一些设备特性的支持,如:
◆加速度传感器数据
◆内建的摄像头(如果有的话)
◆用户的照片库
◆设备名和型号信息
◆电池状态信息
◆接近传感器信息
◆耳机线控信息