iOS是在iPad,iPhone和iPod touch设备上运行的操作系统。 操作系统管理设备硬件,并提供实现本机应用所需的技术。 该操作系统还随附各种系统应用程序,如电话,邮件和Safari,为用户提供标准的系统服务。
iOS软件开发工具包(SDK)包含开发,安装,运行和测试iOS设备主屏幕上显示的原生应用程序所需的工具和界面。 本机应用程序使用iOS系统框架和Objective-C语言构建,并直接在iOS上运行。 与Web应用程序不同,本机应用程序物理地安装在设备上,因此,即使设备处于飞行模式,用户也可以随时使用。 它们位于其他系统应用程序旁边,应用程序和任何用户数据都通过iTunes同步到用户的计算机。
注意:可以使用HTML,级联样式表(CSS)和JavaScript代码的组合来创建Web应用程序。 Web应用程序在Safari Web浏览器中运行,并需要网络连接才能访问您的Web服务器。本文档不涵盖网络应用程序的创建。有关在Safari中创建Web应用程序的更多信息,请参阅“Safari Web内容指南”。
初探
iOS SDK提供开发原生iOS应用所需的资源。了解SDK中包含的技术和工具有助于您更好地选择如何设计和实施应用程序。
iOS架构已分层
在最高级别,iOS作为底层硬件和您创建的应用程序之间的中介。应用程序不直接与底层硬件通话。相反,它们通过一组定义明确的系统接口与硬件进行通信。这些接口可以轻松地编写在具有不同硬件功能的设备上始终如一地工作的应用程序。
iOS技术的实现可以看作是一组图,
如图I-1所示。Layers of iOS
在编写代码时,建议您尽可能使用较低级别的框架。更高级别的框架是为较低级别的构造提供面向对象的抽象。这些抽象通常使编写代码变得更加容易,因为它们可以减少编写代码并封装潜在的复杂功能(如套接字和线程)。如果它们包含未被较高级别框架公开的功能,也可以使用较低级别的框架和技术。
相关章节:cocoa touch 层,媒体层,核心服务层,核心OS层
iOS技术被打包为框架
苹果公司通过称为框架的特殊包装提供大部分系统接口。框架是一个包含动态共享库和支持该库所需的资源(如头文件,图像和帮助应用程序)的目录。要使用框架,您可以将它们从Xcode添加到您的应用程序项目中。
相关部分:iOS框架
开发人员库有帮助您
iOS开发人员库是您在开发期间使用的重要资源。该库包含API参考,编程指南,发行说明,技术说明,示例代码和许多其他资源,提供有关创建应用程序的最佳方式的提示和指导。
您可以从Apple Developer网站或Xcode访问iOS开发人员库。在Xcode中,选择帮助>文档和API参考,以显示Xcode文档窗口,这是访问iOS开发信息的中心资源。使用文档窗口浏览,搜索和书签文档。
如何使用本文档
iOS技术概述是iOS平台新手入门指南。它概述了对开发过程有影响的技术和工具,并提供了相关文件和其他信息来源的链接。您应该使用本文档:
面向iOS平台
了解iOS软件技术,您为什么要使用它们以及何时使用它们
了解平台的发展机会
获取有关如何从其他平台移动到iOS的提示和指南
查找与您感兴趣的技术相关的关键文件
本文档不提供有关软件开发过程不受影响的用户级功能的信息,也不列出特定iOS设备的硬件功能。新的开发人员应该发现这个文档对熟悉iOS有用。有经验的开发人员可以将其作为探索具体技术和开发技术的路线图。
也可以看看
如果您刚开始iOS开发,本书仅提供系统的概述。要了解有关如何开发iOS应用程序的更多信息,请阅读以下文档:
开始开发iOS应用程序(Swift)提供了开发过程的导览,从设置系统开始,结束如何将应用程序提交到App Store的过程。如果您是开发iOS应用程序的新手,这是浏览iOS应用程序开发的另一个好的起点。
iOS人机接口指南提供有关如何设计应用程序用户界面的指导和信息。
应用程序分发指南从工具的角度描述了iOS开发过程。本文档介绍了用于开发的设备的配置和配置,并涵盖了Xcode(和其他工具)用于构建,运行和测试软件的使用。
要在设备上开发,您可以注册Apple的付费iOS开发人员程序,然后配置设备进行开发。注册后,请在iOS开发中心获取Xcode和iOS SDK的副本
Cocoa Touch层
Cocoa Touch层包含构建iOS应用程序的关键框架。这些框架定义了您的应用程序的外观。他们还提供基本的应用程序基础设施和对关键技术的支持,如多任务,基于触摸的输入,推送通知和许多高级系统服务。在设计应用程序时,您应该首先调查此层中的技术,以确定它们是否满足您的需求。
高级功能
以下部分介绍了Cocoa Touch层中可用的一些关键技术。
应用扩展
iOS 8可以通过提供应用程序扩展来扩展系统的选择区域,该应用程序扩展是在用户任务的上下文中启用自定义功能的代码。例如,您可以提供一个应用程序扩展程序,可以帮助用户将内容发布到您的社交共享网站。用户安装并启用此扩展后,他们可以在当前应用程序中点击“共享”按钮时选择它。您的自定义共享扩展程序提供了接受,验证和发布用户内容的代码。系统列出共享菜单中的扩展名,并在用户选择时对其进行实例化。
在Xcode中,您可以通过向应用添加预配置的应用扩展目标来创建应用扩展。用户安装包含扩展程序的应用程序后,用户可以在“设置”应用中启用该扩展程序。当用户正在运行其他应用程序时,系统会在相应的系统用户界面(如“共享”菜单)中启用已启用的扩展。
iOS支持以下区域的应用程序扩展名,这些区域称为扩展点:
分享。与社交网站或其他实体分享内容。
行动。使用当前内容执行一个简单的任务。
窗口小部件。在“通知中心”的“今日”视图中提供快速更新或启用简要任务。
图片修改。对照片应用程序中的照片或视频进行编辑。
文件提供者提供可由其他应用程序访问的文档存储位置。使用文档选择器视图控制器的应用程序可以打开由文档提供者管理的文件或将文件移动到文档提供者。
自定义键盘提供用户可以选择的自定义键盘来代替设备上所有应用程序的系统键盘。
每个扩展点为其目的定义适当的API。当您使用应用程序扩展模板开始开发时,您将获得包含由您选择的扩展点定义的方法存根和属性列表设置的默认目标。
有关创建扩展的更多信息,请参阅App Extension编程指南。
Handoff
Handoff是OS X和iOS中的一项功能,它扩展了用户在不同设备之间的连续性体验。 Handoff使用户能够在一个设备上开始活动,然后切换到另一个设备,并在其他设备上恢复相同的活动。例如,正在浏览Safari中的长篇文章的用户将移动到已登录到同一个Apple ID的iOS设备,同一网页会自动在iOS上的Safari中打开,与原始设备上的滚动位置相同。切换使得这种体验尽可能无缝。
要参与Handoff,应用程序在Foundation中采用小型API。应用程序中的每个正在进行的活动都由用户活动对象表示,该对象包含在另一个设备上恢复活动所需的数据。当用户选择恢复该活动时,该对象被发送到恢复设备。每个用户活动对象都有一个委托对象,该对象被调用以在适时的时间刷新活动状态,例如在用户活动对象在设备之间发送之前。
如果持续的活动需要比用户活动对象容易传输的更多的数据,则恢复应用程序可以选择向原始应用程序打开流。基于文档的应用程序自动支持使用基于iCloud的文档的用户的活动延续。
有关如何支持切换的更多信息,请参阅切换编程指南。
文件选择器
文档选择器视图控制器(UIDocumentPickerViewController)允许用户访问应用程序沙箱外的文件。这是一种在应用程序之间共享文档的简单机制。它还可以实现更复杂的工作流程,因为用户可以使用多个应用程序编辑单个文档。
文档选择器允许您从多个文档提供者访问文件。例如,iCloud文档提供者可以访问存储在另一个应用程序的iCloud容器中的文档。第三方开发人员可以通过使用存储提供程序扩展来提供其他文档提供者。
有关如何使用文档选择器的更多信息,请参阅“文档选择器编程指南”。
AirDrop
AirDrop可让用户与附近的设备共享照片,文档,URL和其他类型的数据。使用AirDrop将文件发送到其他iOS设备的支持内置在现有的UIActivityViewController类中。此类显示用于共享您指定的内容的不同选项。如果您尚未使用此类,则应考虑将其添加到您的界面。
要接收使用AirDrop发送的文件,您的应用程序必须执行以下操作:
声明对Xcode中适当的文档类型的支持。 (Xcode将相应的密钥添加到应用的Info.plist文件中。)系统使用此信息来确定您的应用是否可以打开给定的文件。
在应用程序委托中实现应用程序:openURL:sourceApplication:annotation:方法。 (系统在收到新文件时调用此方法。)
发送到您的应用程序的文件被放置在应用程序主目录的Documents / Inbox目录中。如果您打算修改该文件,则必须将其移出该目录,然后再执行此操作。 (该系统允许您的应用程序仅读取和删除此目录中的文件。)存储在此目录中的文件使用数据保护进行加密,因此如果设备当前被锁定,则必须准备好该文件是无法访问的。
有关使用活动视图控制器共享数据的更多信息,请参阅UIActivityViewController类参考。
TextKit
TextKit是一个功能齐全的高级课程,用于处理文本和精细排版。使用TextKit,您可以将样式文本放置在段落,列和页面中;您可以在任意区域流动文本,如图形;您可以使用它来管理多种字体。如果您正在考虑使用Core Text来实现文本渲染,那么您应该考虑使用TextKit。 TextKit与所有基于UIKit文本的控件集成,使应用程序能够更轻松地创建,编辑,显示和存储文本,并且使用的代码少于以前在iOS中可用的代码。
TextKit包含新的UIKit类,以及现有类的扩展,包括以下内容:
NSAttributedString类已被扩展以支持新属性。
NSLayoutManager类生成字形并显示文本。
NSTextContainer类定义了一个文本布局的区域。
NSTextStorage类定义了用于管理基于文本的内容的基本界面。
有关TextKit的更多信息,请参阅iOS的文本编程指南。
UIKit Dynamics
应用程序现在可以为UIView对象和符合UIDynamicItem协议的其他对象指定动态行为。 (符合此协议的对象称为动态项目。)动态行为提供了一种通过将现实世界的行为和特征结合到应用程序的用户界面来改善应用程序的用户体验的方法。 UIKit动态支持以下类型的行为:
UIAttachmentBehavior对象指定两个动态项之间或项与点之间的连接。当一个项目(或点)移动时,附加的项目也移动。连接不是完全静止的。附件行为具有阻尼和振荡特性,可确定行为随时间的变化。
UICollisionBehavior对象允许动态项目相互碰撞并且与行为的指定边界相互参与。该行为还允许这些项目对碰撞进行适当的响应。
UIGravityBehavior对象为其动态项指定重力向量。动态项目在向量方向上加速,直到它们与其他适当配置的项目或边界碰撞。
UIPushBehavior对象为其动态项指定连续或瞬时的力向量。
UISnapBehavior对象指定动态项目的捕捉点。该项目将捕捉到具有已配置效果的点。例如,一个动态项目可以捕捉到这个点,就像它连接到一个弹簧一样。
将动态行为添加到动画对象(即UIDynamicAnimator类的一个实例)时,动态行为变得活跃。动画师提供动态行为执行的上下文。给定的动态项目可以有多个行为,但所有这些行为必须由同一个动画制作对象动画化。
有关可以应用的行为的信息,请参阅UIKit框架参考。
多任务处理
电池寿命是iOS设备用户的重要考虑因素,iOS中的多任务模式旨在最大限度地延长电池使用寿命,同时为应用程序提供需要进行关键工作的时间。当用户按下“主页”按钮时,前台应用程序将切换到后台执行上下文。如果应用程序没有更多的工作要做,它将被暂停执行,并被置于“冻干”状态,它保留在内存中,但不执行任何代码。需要特定类型工作的应用程序可以询问系统用于后台执行时间,例如:
应用程序可以请求有限的时间来完成一些重要任务。
支持特定服务(如音频播放)的应用程序可以请求时间来提供这些服务。
应用程序可以使用本地通知在指定时间生成用户警报,无论应用程序是否正在运行。
应用程序可以从网络定期下载内容。
应用程序可以下载内容以响应推送通知。
有关如何支持iOS多任务模型的信息,请参阅iOS应用程序编程指南。
自动布局
自动布局可以帮助您构建动态界面,代码很少。使用自动布局,您可以定义用于在用户界面中布局元素的规则。这些规则表达了更大的关系类型,比以前使用的spring和struts模型更直观。例如,您可以指定一个按钮总是从其父视图的左边缘20点。
Auto Layout中使用的实体是称为约束的Objective-C对象。约束提供了几个好处:
它们通过单独交换字符串来支持本地化,而不是要求您更新布局。
它们支持从右至左语言(如希伯来语和阿拉伯语)对用户界面元素进行镜像。
它们可以更好地分离视图和控制器层中的对象之间的关系。
视图对象通常具有标准尺寸的值,其在其超视图内的定位以及相对于其兄弟视图的定位。如果需要非标准,视图控制器可以覆盖这些值。
有关使用自动布局的更多信息,请参阅自动布局指南。
故事板
故事板是设计应用程序用户界面的推荐方法。故事板让您在一个地方设计整个用户界面,以便您可以看到所有的视图和视图控制器,并了解它们如何协同工作。故事板的一个重要部分是能够定义段,即从一个视图控制器到另一个视图控制器的转换。这些转换允许您除了内容之外捕获用户界面的流程。您可以在Xcode中以可视方式定义这些转换,或者以编程方式启动它们。
您可以使用单个故事板文件来存储所有应用程序的视图控制器和视图,也可以使用多个视图故事板来组织界面的部分。在构建时,Xcode会将故事板文件的内容分割成不同的部分,可以单独加载以获得更好的性能。您的应用程序不需要直接操作这些程序。 UIKit框架提供了从代码访问故事板内容的便利类。
有关使用故事板设计界面的更多信息,请参阅Xcode用户指南。有关如何从代码访问故事板的信息,请参阅UIStoryboard类参考。
UI状态保存
状态保存为用户提供了一个无缝的体验,让您的应用程序看起来一直在运行,即使没有。如果系统遇到内存压力,可能会被迫静静地终止一个或多个后台应用程序。当应用程序从前台移动到后台时,它可以保留其视图和视图控制器的状态。在下一个启动周期中,它可以使用保留的状态信息来恢复其视图,并将控制器查看到之前的配置,并使其看起来像应用程序从不退出。
有关如何为您的应用程序添加状态保留支持的更多信息,请参阅iOS的“应用程序编程指南”。
苹果推送通知服务
Apple Push Notification服务提供了一种方式来提醒用户有关新信息,即使您的应用程序未正在运行。使用此服务,您可以随时推送文字通知,向您的应用图标添加徽章,或在用户设备上触发声音警报。这些消息让用户知道他们应该打开你的应用程序来接收相关的信息。在iOS 7中,您甚至可以推送静音通知,让您的应用知道新内容可以下载。
从设计的角度来看,推送通知有两个部分用于iOS应用。首先,应用程序必须请求交付通知,并在通知数据交付后处理通知数据。其次,您需要提供一个服务器端进程来首先生成通知。此过程位于您自己的本地服务器上,并与Apple Push Notification Service一起触发通知。
有关如何配置应用程序以使用远程通知的更多信息,请参阅本地和远程通知编程指南。
本地通知
本地通知补充现有的推送通知机制,方法是通过向应用程序提供在本地生成通知的方式,而不是依赖外部服务器。在后台运行的应用程序可以使用本地通知作为重要事件发生时用户注意的一种方式。例如,在后台运行的导航应用程序可以使用本地通知来提醒用户什么时候轮到。应用程序还可以安排未来日期和时间的本地通知的传递,并且即使应用程序未运行,也会发送这些通知。
本地通知的优点在于它们独立于您的应用程序。在安排通知后,系统管理它的传递。您的应用程式甚至在通知传送时甚至不需要运行。
有关使用本地通知的更多信息,请参阅本地和远程通知编程指南。
手势识别器
手势识别器会检测常见的手势类型,例如在应用程式视图中滑动和捏住。因为它们使用与用于检测手势的系统相同的启发式方式,手势识别器为您的应用程序提供一致的行为。要使用它,您将手势识别器附加到您的视图,并给它一个动作方法来执行手势何时发生。手势识别器执行跟踪原始触摸事件和确定何时构成预期手势的困难工作。
所有手势识别器都基于UIGestureRecognizer类,它定义了基本行为。 UIKit提供标准的手势识别器子类来检测水龙头,夹点,平底锅,滑动,旋转。您还可以根据应用的需要定制大多数手势识别器的行为。例如,您可以在调用您的操作方法之前通知点击手势识别器来检测特定数量的抽头。
有关可用的手势识别器的更多信息,请参阅UIKit应用程序的事件处理指南。
标准系统视图控制器
许多系统框架定义了标准系统接口的视图控制器。只要有可能,请使用提供的视图控制器,而不是创建自己的视图。我们鼓励您在应用程序中使用这些视图控制器来呈现一致的用户体验。每当您需要执行以下任务之一时,应使用相应框架中的视图控制器:
显示或编辑联系信息。在地址簿UI框架中使用视图控制器。
创建或编辑日历事件。在EventKit UI框架中使用视图控制器。
撰写电子邮件或短信。在消息UI框架中使用视图控制器。
打开或预览文件的内容。在UIKit框架中使用UIDocumentInteractionController类。
拍摄照片或从用户的照片库中选择照片。在UIKit框架中使用UIImagePickerController类。
拍摄视频剪辑。在UIKit框架中使用UIImagePickerController类。
有关如何呈现和关闭视图控制器的信息,请参阅“用于iOS的View Controller编程指南”。有关特定视图控制器提供的界面的信息,请参阅iOS的View Controller Catalog。
Cocoa Touch框架
以下部分描述了Cocoa Touch图层的框架及其提供的服务。
通讯录UI框架
地址簿UI框架(AddressBookUI.framework)是一个Objective-C编程接口,用于显示用于创建新联系人的标准系统界面,以及编辑和选择现有联系人。该框架简化了在应用程序中显示联系人信息所需的工作,并确保您的应用程序使用与其他应用程序相同的界面,从而确保整个平台的一致性。
有关地址簿UI框架的类别以及如何使用它们的更多信息,请参阅iOS的通讯录编程指南和iOS的通讯录UI框架参考。
EventKit UI框架
EventKit UI框架(EventKitUI.framework)提供了视图控制器,用于呈现用于查看和编辑日历相关事件的标准系统界面。该框架基于EventKit框架中的事件相关数据,该事件在Event Kit Framework中有描述。
有关此框架的类和方法的更多信息,请参阅事件工具包UI框架参考。
GameKit框架
GameKit框架(GameKit.framework)实现了对Game Center的支持,可以让用户在线分享他们的游戏相关信息。 Game Center为以下功能提供支持:
别名,允许用户创建自己的在线角色。用户登录游戏中心,并通过别名匿名与其他玩家互动。玩家可以设置状态消息,并将特定人标记为他们的朋友。
排行榜,允许您的应用将用户分数发布到Game Center并稍后检索。您可以使用此功能在应用的所有用户中显示最佳分数。
配对,让您通过连接登录游戏中心的玩家创建多人游戏。玩家不必相互参与多人游戏。
成就,让您记录玩家在游戏中所取得的进步。
挑战,允许玩家挑战一个朋友打败成就或得分。 (iOS 6及更高版本)
基于回合的游戏,创建状态存储在iCloud中的持续比赛。
有关如何使用GameKit框架的更多信息,请参阅Game Center Programming Guide和Game Kit Framework Reference。
iAd框架
iAd框架(iAd.framework)可让您从应用程序中提供基于横幅的广告。广告被并入标准视图中,您将集成到用户界面中,并在需要时显示。视图本身与Apple的iAd服务配合使用,可以自动处理与加载和展示富媒体广告相关的所有工作,并响应这些广告的点击。
有关在应用程序中使用iAd的更多信息,请参阅iAd Programming Guide和iAd Framework Reference。
MapKit框架
MapKit框架(MapKit.framework)提供了一个可滚动的地图,您可以将其纳入到应用的用户界面中。除了显示地图外,您还可以使用框架界面来自定义地图的内容和外观。您可以使用注释来标记兴趣点,您可以使用自定义叠加层将地图内容插入到您自己的内容中。例如,您可以使用重叠式绘制总线路线,或使用注释来突出显示附近的商店和餐馆。
除了显示地图之外,MapKit框架还与Maps应用程序和Apple的地图服务器集成,以便于指导。使用Google地图应用程式,用户可以将支援路线的方向委派给任何支援路线的应用程式。提供专门类型的路线的应用程序(如地铁路线)可以在询问时注册以提供这些路线。应用程序还可以从Apple服务器请求步行和行车路线,并将路线信息与自定义路线合并,为用户提供完整的点对点体验。
有关使用MapKit框架类的更多信息,请参阅位置和地图编程指南和Map Kit框架参考。
消息UI框架
Message UI框架(MessageUI.framework)提供了从应用程序撰写电子邮件或短信的支持。组合支持由您的应用程序中显示的视图控制器接口组成。您可以填充此视图控制器的字段,以设置要包含消息的收件人,主题,正文内容和任何附件。在呈现视图控制器之后,用户可以在发送之前选择编辑该消息。
有关Message UI框架的类的更多信息,请参阅消息UI框架参考。有关使用此框架的类的信息,请参阅iOS的系统消息编程主题。
通知中心框架
通知中心框架(NotificationCenter.framework)提供了在通知中心中创建显示信息的小部件的支持。有关如何创建通知中心小部件的信息,请参阅“应用程序扩展编程指南”和“通知中心框架参考”。
PushKit框架
PushKit框架(PushKit.framework)为VoIP应用程序提供注册支持。此框架取代了以前用于注册VoIP应用程序的API。一个应用程序可以使用此框架来接收来电的推送通知,而不是保持持续连接的打开状态,从而排出设备的电池。
有关此框架的接口的信息,请参阅框架头文件。
Twitter框架
Twitter框架(Twitter.framework)已被社交框架所取代,该框架支持用于生成Twitter的UI,并支持创建访问Twitter服务的URL。有关更多信息,请参阅社会框架。
UIKit框架
UIKit框架(UIKit.framework)为在iOS中实现图形,事件驱动的应用程序提供了关键的基础设施,其中包括:
基本的应用管理和基础设施,包括应用程序的主要运行环路
用户界面管理,包括对故事板和nib文件的支持
用于封装用户界面内容的视图控制器模型
表示标准系统视图和控件的对象
支持处理基于触摸和运动的事件
支持包含iCloud集成的文档模型;请参阅基于文档的iOS应用程序编程指南
图形和窗口支持,包括对外部显示器的支持;请参阅“iOS的编程指南”
多任务支持请参阅多任务
印刷支持;请参阅iOS绘图和打印指南
支持定制UIKit标准控件的外观
支持文本和网页内容
剪切,复制和粘贴支持
支持动画用户界面内容
通过URL方案和框架界面与系统上的其他应用程序集成
残疾人士的辅助功能支援
支持Apple Push Notification服务;请参阅Apple Push Notification Service
本地通知调度和交付;请参阅本地通知
PDF创建
支持使用与系统键盘类似的自定义输入视图
支持创建与系统键盘交互的自定义文本视图
支持通过电子邮件,Twitter,Facebook和其他服务共享内容
除了提供构建应用程序的基础代码之外,UIKit还集成了对某些设备特定功能的支持,如下所示:
内置摄像头(如有)
用户的照片库
设备名称和型号信息
电池状态信息
接近传感器信息
来自附件耳机的遥控信息
有关UIKit框架类的信息,请参阅UIKit框架参考。
媒体层
媒体层包含用于在应用程序中实现多媒体体验的图形,音频和视频技术。这一层的技术让您轻松构建外观美观的应用程序。
图形技术
高质量的图形是所有应用程序的重要组成部分,而iOS提供了许多技术来帮助您将自定义艺术和图形放在屏幕上。 iOS图形技术提供广泛的支持,与UIKit视图体系结构无缝协作,便于交付内容。您可以使用标准视图快速提供高质量的界面,也可以创建自己的自定义视图,并使用表2-1中列出的任何技术来提供更加丰富的图形体验。
表2-1 iOS中的图形技术
技术
描述
UIKit图形
UIKit定义了绘制图像和Bézier路径以及动画视图内容的高级支持。除了提供类以实现绘图支持之外,UIKit视图还提供了一种快速有效的方式来渲染图像和基于文本的内容。视图也可以显式地和使用UIKit动态动画,提供反馈和促进用户交互。
有关UIKit框架类的更多信息,请参阅UIKit框架参考。
核心图形框架
核心图形(也称为Quartz)是iOS应用程序的本机绘图引擎,并支持自定义2D矢量和基于图像的渲染。尽管并不像OpenGL ES渲染那么快,但是该框架非常适合您想要动态渲染自定义2D形状和图像的情况。
有关更多信息,请参阅核心图形框架。
核心动画
核心动画(Quartz Core框架的一部分)是优化您的应用程序动画体验的基础技术。 UIKit视图使用Core Animation来提供视图级的动画支持。当您想要更好地控制动画的行为时,可以直接使用Core Animation。
有关更多信息,请参阅Quartz Core Framework。
核心图像
Core Image提供了以非破坏性方式操纵视频和静止图像的高级支持。
有关更多信息,请参阅Core Image Framework。
OpenGL ES和GLKit
OpenGL ES使用硬件加速接口处理高级2D和3D渲染。这个框架传统上是由游戏开发者或任何想要实现沉浸式图形体验的人使用的。该框架可以让您完全控制渲染过程,并提供创建平滑动画所需的帧速率。有关更多信息,请参阅OpenGL ES Framework。
GLKit是一组Objective-C类,它使用面向对象的界面提供了OpenGL ES的强大功能。有关更多信息,请参阅GLKit框架。
Metal Framework
金属提供对A7 GPU的极低开销访问,为您的复杂的图形渲染和计算任务提供了令人难以置信的高性能。金属消除了传统图形API中发现的许多性能瓶颈,例如昂贵的状态验证。有关更多信息,请参阅Metal Framework。
TextKit和Core Text
TextKit是一系列用于执行精细排版和文本管理的UIKit类。如果您的应用程序执行高级文本操作,TextKit提供与其他视图的无缝集成。有关详细信息,请参阅文本工具包。
Core Text是用于处理高级排版和布局的较低级别的基于C的框架。有关更多信息,请参阅核心文本框架。
图像I / O
图像I / O提供了用于读取和写入大多数图像格式的接口。有关更多信息,请参阅图像I / O框架。
照片库
照片和PhotosUI框架提供对用户的照片,视频和媒体的访问。您在将用户自己的内容与应用程序集成在一起的地方使用此框架。有关更多信息,请参阅照片框架和照片UI框架。
iOS可以为Retina显示器或标准分辨率显示器上运行的应用程序提供内置支持。对于基于矢量的绘图,系统框架自动使用Retina显示屏的额外像素来提高内容的清晰度。如果您在应用程序中使用图像,UIKit可以自动加载现有图像的高分辨率变体。有关您需要做什么来支持高分辨率屏幕的更多信息,请参阅iOS应用程序编程指南中的应用程序相关资源。
音频技术
iOS音频技术与底层硬件配合使用,为用户提供丰富的音频体验。这种体验包括播放和录制高质量音频,处理MIDI内容以及处理设备内置声音的能力。
如果您的应用程序使用音频,可以使用多种技术供您使用。表2-2列出了这些框架,并描述了您可以使用每个框架的情况。
表2-2 iOS中的音频技术
技术
描述
媒体播放器框架
这个高级框架可以方便地访问用户的iTunes库并支持播放曲目和播放列表。当您想要将音频快速集成到应用程序中,并且当您不需要控制播放行为时,请使用此框架。有关更多信息,请参阅Media Player Framework。
AVFoundation
AV Foundation是用于管理音频和视频录制和播放的Objective-C界面。使用此框架录制音频,当您需要对音频播放过程进行细粒度控制时。有关更多信息,请参阅AV Foundation Framework。
OpenAL
OpenAL是提供定位音频的行业标准技术。游戏开发人员经常使用这种技术,使用一套跨平台接口提供高品质的音频。有关更多信息,请参阅OpenAL Framework。
核心音频
Core Audio是一组框架,可为录制和播放音频和MIDI内容提供简单而复杂的界面。这个框架适用于需要对其音频进行细粒度控制的高级开发人员。有关更多信息,请参阅Core Audio。
iOS支持许多行业标准和Apple特定的音频格式,包括以下内容:
AAC
苹果无损(ALAC)
一条法律
IMA / ADPCM(IMA4)
线性PCM
μ律
DVI / Intel IMA ADPCM
微软GSM 6.10
AES3-2003
视频技术
iOS视频技术支持管理您应用中的静态视频内容或从互联网播放流媒体内容。对于具有适当录制硬件的设备,您还可以录制视频并将其合并到应用程序中。支持视频播放和录制的技术如表2-3所示。
表2-3 iOS中的视频技术
技术
描述
UIImagePickerController
UIImagePickerController类是用于选择用户媒体文件的UIKit视图控制器。您可以使用此视图控制器提示用户现有的图片或视频,或让用户捕获新的内容。有关详细信息,请参阅iOS的摄像头编程主题。
AVKit
AVKit框架提供了一组用于呈现视频的简单易用的界面。该框架支持全屏和部分屏幕视频播放,并支持用户可选的播放控制。有关更多信息,请参阅AVKit框架。
AVFoundation
AVFoundation提供高级视频播放和录制功能。在需要更多控制视频的演示或录制的情况下使用此框架。例如,增强现实应用程序可以使用此框架来与其他应用程序提供的内容分层实时视频内容。有关更多信息,请参阅AV Foundation Framework。
核心媒体
Core Media框架定义了用于操纵媒体的低级数据类型和接口。大多数应用程序不需要直接使用此框架,但是当您需要对应用程序的视频内容进行无与伦比的控制时,可以使用它。有关更多信息,请参阅核心媒体框架。
iOS支持许多行业标准的视频格式和压缩标准,包括以下内容:
H.264视频,高达1.5 Mbps,640 x 480像素,每秒30帧,H.264基线配置文件的低复杂度版本,AAC-LC音频高达160 Kbps,48 kHz,立体声音频为.m4v, .mp4和.mov文件格式
H.264视频,高达768 Kbps,320 x 240像素,每秒30帧,基线配置文件高达1.3级,AAC-LC音频高达160 Kbps,48 kHz,立体声音频为.m4v,.mp4和。 mov文件格式
MPEG-4视频,高达2.5 Mbps,640 x 480像素,30帧/秒,简单配置文件,AAC-LC音频高达160 Kbps,48 kHz,立体声音频.m4v,.mp4和.mov文件格式
多种音频格式,包括音频技术中列出的音频格式
AirPlay
AirPlay让您的应用程序将音频和视频内容流传播到Apple TV,并将音频内容流式传输到第三方AirPlay扬声器和接收器。 AirPlay支持内置于众多框架 - UIKit框架,Media Player框架,AV Foundation框架和Core Audio系列框架中 - 因此在大多数情况下,您不需要做任何特别的支持。您使用这些框架播放的任何内容都将自动符合AirPlay发行的资格。当用户选择使用AirPlay播放内容时,系统将自动路由。
通过AirPlay传递内容的其他选项包括:
要扩展iOS设备显示的内容,请创建第二个窗口对象,并将其分配给通过AirPlay连接到设备的任何UIScreen对象。当您在附件屏幕上显示的内容与iOS设备上显示的内容不同时,请使用此技术。
Media Player框架的播放类自动支持AirPlay。您还可以使用AirPlay在连接的Apple TV上显示正在播放内容。
使用AV Foundation中的AVPlayer类来管理您的应用的音频和视频内容。当用户启用此类时,该类支持通过AirPlay流式传输其内容。
对于基于网络的音频和视频,您可以通过将包含airplay属性的embed标签包含在AirPlay中来播放内容。 UIWebView类还支持使用AirPlay播放媒体。
有关如何在您的应用程序中利用AirPlay的信息,请参阅AirPlay概述。
媒体层框架
以下部分介绍媒体层的框架及其提供的服务。
资产图书馆框架
资产库框架(AssetsLibrary.framework)可以访问由用户设备上的照片应用程序管理的照片和视频。使用此框架访问用户保存的照片相册或导入设备的任何相册中的项目。您还可以将新照片和视频保存回用户保存的照片相册。
有关此框架的类和方法的更多信息,请参阅资产库框架参考。
AVFoundation.framework
AV基础框架(AVFoundation.framework)提供了一组用于播放,录制和管理音频和视频内容的Objective-C类。当您想要将媒体功能无缝集成到应用程序的用户界面中时,请使用此框架。您还可以使用它来进行更高级的媒体处理。例如,您可以使用此框架同时播放多个声音,并控制播放和录制过程的多个方面。
该框架提供的服务包括:
音频会话管理,包括支持向系统声明应用程序的音频功能
管理您的应用的媒体资产
支持编辑媒体内容
捕获音频和视频的能力
播放音频和视频的能力
追踪管理
媒体项目的元数据管理
立体声平移
声音之间的精确同步
用于确定声音文件详细信息的Objective-C界面,如数据格式,采样率和通道数
支持AirPlay上的流媒体内容
有关如何使用AV Foundation的更多信息,请参阅“AVFoundation编程指南”。有关AV Foundation框架类的信息,请参阅AV Foundation Framework Reference。
AVKit框架
AVKit框架(AVKit.framework)利用AV Foundation中的现有对象管理设备上视频的呈现。当您需要显示视频内容时,它旨在替代媒体播放器框架。
有关此框架的更多信息,请参阅头文件。
核心音频
Core Audio是一系列框架(列于表2-4中),可提供处理音频的本地支持。这些框架支持在您的应用程序中生成,录制,混合和播放音频。您还可以使用这些界面来处理MIDI内容,并将音频和MIDI内容流式传输到其他应用程序。
表2-4核心音频框架
骨架
服务
CoreAudio.framework
定义Core Audio中使用的音频数据类型。有关更多信息,请参阅Core Audio Framework Reference。
AudioToolbox.framework
为音频文件和流提供播放和录制服务。该框架还支持管理音频文件,播放系统警报声音,并在某些设备上触发振动功能。有关详细信息,请参阅音频工具箱框架参考。
AudioUnit.framework
提供使用音频处理模块的内置音频单元的服务。该框架还支持将应用程序的音频内容作为其他应用程序可见的音频组件。有关更多信息,请参阅音频单元框架参考。
CoreMIDI.framework
提供与MIDI设备通信的标准方式,包括硬件键盘和合成器。您可以使用此框架发送和接收MIDI消息,并使用基座连接器或网络与连接到基于iOS的设备的MIDI外设进行交互。有关更多信息,请参阅Core MIDI框架参考。
MediaToolbox.framework
提供对音频抽头接口的访问。
有关Core Audio的更多信息,请参阅Core Audio Overview。有关如何使用音频工具箱框架播放声音的信息,请参阅“音频队列服务编程指南”。
CoreAudioKit框架
CoreAudioKit框架(CoreAudioKit.framework)提供标准视图,用于管理支持应用间音频的应用之间的连接。一个视图提供了一个切换器,显示其他连接的应用程序的图标,另一个视图显示用户可以用来操纵主机应用程序提供的音频的传输控件。
有关此框架的接口的更多信息,请参阅框架头文件。
核心图形框架
Core Graphics框架(CoreGraphics.framework)包含Quartz 2D绘图API的接口。 Quartz是用于OS X的先进的基于矢量的绘图引擎。它支持基于路径的绘图,抗锯齿渲染,渐变,图像,颜色,坐标空间转换和PDF文档创建,显示和解析。虽然API是基于C的,但它使用基于对象的抽象来表示基本的绘图对象,使其易于存储和重用您的图形内容。
有关如何使用Quartz绘制内容的更多信息,请参阅“Quartz 2D编程指南”和“Core Graphics Framework Reference”。
核心图像框架
Core Image框架(CoreImage.framework)提供了一套功能强大的内置过滤器,用于操纵视频和静态图像。您可以使用内置的过滤器从触摸和校正照片到脸部,功能和QR码检测。这些滤波器的优点是它们以非破坏性的方式工作,保持原始图像不变。由于过滤器针对底层硬件进行了优化,因此它们快速高效。
有关Core Image框架的类和过滤器的信息,请参阅Core Image Reference Collection。
核心文本框架
Core Text框架(CoreText.framework)提供了一个简单,高性能的基于C的界面,用于布置文本和处理字体。该框架适用于不使用TextKit的应用程序,但仍然需要在文字处理器应用程序中找到的高级文本处理功能。该框架提供了一个复杂的文本布局引擎,包括围绕其他内容包装文本的功能。它还支持使用多种字体和渲染属性的高级文本样式。
有关Core Text界面的更多信息,请参阅Core Text Programming Guide和Core Text Reference Collection。
核心视频框架
核心视频框架(CoreVideo.framework)为Core Media框架提供缓冲区和缓冲池支持(在Core Media Framework中描述)。大多数应用程序不需要直接使用这个框架。
游戏控制器框架
游戏控制器框架(GameController.framework)可让您在应用程序中发现和配置Made-for-iPhone / iPod / iPad(MFi)游戏控制器硬件。游戏控制器可以是物理连接到iOS设备或通过蓝牙无线连接的设备。当控制器可用时,游戏控制器框架通知您的应用程序,并允许您指定哪些控制器输入与您的应用程序相关。
有关支持游戏控制器,游戏控制器编程指南的更多信息。
GLKit框架
GLKit框架(GLKit.framework)包含一组基于Objective-C的实用程序类,可以简化创建OpenGL ES应用程序所需的工作。 GLKit支持应用程序开发的四个关键领域:
GLKView和GLKViewController类提供了OpenGL ES启用视图和关联渲染循环的标准实现。该视图代表应用程序管理基础帧缓冲区对象;您的应用程序只是绘制它。
GLKTextureLoader类为您的应用程序提供图像转换和加载例程,允许它自动将纹理图像加载到您的上下文中。它可以同步或异步加载纹理。当异步加载纹理时,您的应用程序提供了一个完成处理程序块,当纹理加载到上下文中时将被调用。
GLKit框架提供向量,矩阵和四元数的实现,以及提供与OpenGL ES 1.1中相同的功能的矩阵堆栈操作。
GLKBaseEffect,GLKSkyboxEffect和GLKReflectionMapEffect类提供了现有的可配置的图形着色器,可以实现常用的图形操作。特别是,GLKBaseEffect类实现了OpenGL ES 1.1规范中的照明和材料模型,简化了将应用从OpenGL ES 1.1迁移到更高版本的OpenGL ES所需的工作量。
有关GLKit框架的类的信息,请参阅GLKit框架参考。
图像I / O框架
Image I / O框架(ImageIO.framework)提供用于导入和导出图像数据和图像元数据的接口。该框架利用Core Graphics数据类型和功能,并支持iOS中提供的所有标准图像类型。您还可以使用此框架访问图像的Exif和IPTC元数据属性。
有关此框架的功能和数据类型的信息,请参阅图像I / O参考集合。
媒体辅助功能框架
媒体可访问性框架(MediaAccessibility.framework)管理您的媒体文件中的封闭字幕内容的呈现。该框架与新设置一起使用,使用户能够显示隐藏式字幕。
有关此框架的内容的信息,请参阅头文件。
媒体播放器框架
媒体播放器框架(MediaPlayer.framework)为您的应用程序播放音频和视频内容提供了高级支持。您可以使用此框架执行以下操作:
通过AirPlay将视频播放到用户的屏幕或其他设备。您可以全屏播放或以可调整大小的视图播放此视频。
访问用户的iTunes音乐库。您可以播放音乐曲目和播放列表,搜索歌曲,并向用户呈现媒体选择器界面。
配置和管理电影播放。
显示现在在锁定屏幕和应用程序切换器中播放信息。当内容通过AirPlay传送时,您也可以在Apple TV上显示此信息。
检测视频是否通过AirPlay流式传输。
有关媒体播放器框架类的信息,请参阅媒体播放器框架参考。有关如何使用这些类访问用户的iTunes库的信息,请参阅“iPod Library Access编程指南”。
Metal框架
Metal为A7 GPU提供极低的开销访问,可以为复杂的图形渲染和计算任务提供出色的高性能。金属消除了传统图形API中发现的许多性能瓶颈,例如昂贵的状态验证。金属被明确地设计为将所有昂贵的状态转换和编译操作从您最具性能敏感的渲染代码的关键路径中移出。 Metal提供预编译的着色器,状态对象和明确的命令调度,以确保您的应用程序实现GPU图形和计算任务的最高性能和效率。这种设计理念延伸到用于构建应用程序的工具。当您的应用程序构建时,Xcode将项目中的Metal着色器编译为默认库,从而消除了准备这些着色器的大部分运行时代价。
图形,计算和blit命令被设计为无缝和高效地一起使用。金属专门设计用于利用现代架构考虑因素,如多处理和共享内存,以便轻松并行化GPU命令的创建。
使用Metal,您可以使用流线型的API,统一的图形和计算着色语言以及基于Xcode的工具,因此您不需要学习多种框架,语言和工具来充分利用游戏或应用程序中的GPU。
有关如何使用Metal的更多信息,请参阅“金属编程指南”,“金属框架参考”和“金属遮蔽语言指南”。
OpenAL框架
开放音频库(OpenAL)是一种跨平台的应用程序标准。您可以使用它在游戏和其他需要定位音频输出的程序中实现高性能,高品质的音频。因为OpenAL是一个跨平台的标准,所以您在iOS上使用OpenAL编写的代码模块可以轻松地移植到其他许多平台。
有关OpenAL的信息,包括如何使用它,请参阅http://www.openal.org。
OpenGL ES框架
OpenGL ES框架(OpenGLES.framework)提供绘制2D和3D内容的工具。它是一个基于C的框架,与设备硬件紧密合作,为全屏身临其境的应用程序(如游戏)提供精细的图形控制和高帧速率。您可以将OpenGL框架与EAGL接口结合使用,它们可以在OpenGL ES绘图调用和UIKit中的本机窗口对象之间提供接口。
该框架支持OpenGL ES 1.1,2.0和3.0。 2.0规范增加了对片段和顶点着色器的支持,3.0规范增加了对更多功能的支持,包括多个渲染目标和变换反馈。
有关如何在应用程序中使用OpenGL ES的信息,请参阅OpenGL ES编程指南。有关参考信息,请参阅OpenGL ES Framework Reference。
照片框架
照片框架(Photos.framework)为使用照片和视频资产提供了新的API,包括由照片应用程序管理的iCloud照片资产。这个框架是一个更有效的替代资产库框架。主要功能包括线程安全架构,用于提取和缓存缩略图和全尺寸资产,请求更改资产,观察其他应用所做的更改以及可恢复的资产内容编辑。
有关此框架的接口的更多信息,请参阅Photos框架参考。
照片UI框架
照片UI框架(PhotosUI.framework)可以让您在Photos应用程序中创建用于编辑图像和视频资源的应用程序扩展。有关如何创建照片编辑扩展的更多信息,请参阅App Extension编程指南。
QuartzCore框架
Quartz Core框架(QuartzCore.framework)包含Core Animation界面。核心动画是一种高级合成技术,可以轻松创建快速高效的基于视图的动画。合成引擎利用底层硬件有效地和实时地操纵您的视图的内容。指定动画的起点和终点,让核心动画做其他事情。而且由于核心动画内置于底层的UIView体系结构中,因此始终可用。
有关如何在应用程序中使用Core Animation的更多信息,请参阅Core Animation Programming Guide和Core Animation Reference Collection。
SceneKit框架
SceneKit是一个Objective-C框架,用于构建简单的游戏和丰富的应用程序用户界面,具有3D图形,将高性能渲染引擎与高级描述性API相结合。 SceneKit自OS X v10.8以来一直可用,现在可以在iOS中首次使用。较低级的API(如OpenGL ES)要求您实现精确显示场景的渲染算法。相比之下,SceneKit可以让您通过内容几何,材质,灯光和照相机来描述您的场景,然后通过描述对这些对象的更改进行动画化。
SceneKit的3D物理引擎通过模拟重力,力量,刚体碰撞和关节来激活您的应用程序或游戏。添加高级行为,使其易于使用轮式车辆,例如场景中的汽车,并添加将径向重力,电磁或湍流应用于物体在有效区域内的物理场。
使用OpenGL ES将其他内容渲染到场景中,或者提供替代或增强SceneKit渲染的GLSL着色器。您还可以为SceneKit的渲染添加基于着色器的后处理技术,例如颜色分级或屏幕空间环境遮挡。
有关此框架的接口的更多信息,请参阅“场景套件框架参考”。
SpriteKit框架
SpriteKit框架(SpriteKit.framework)为2D和2.5D游戏提供了一个硬件加速动画系统。 SpriteKit提供大多数游戏需要的基础设施,包括图形渲染和动画系统,声音播放支持以及物理模拟引擎。使用SpriteKit可以让您自己创建这些内容,让您专注于内容的设计和该内容的高级互动。
SpriteKit应用中的内容被组织成场景。场景可以包括纹理对象,视频,基于路径的形状,核心图像过滤器和其他特殊效果。 SpriteKit可以获取这些对象,并确定在屏幕上呈现最有效的方法。当您在场景中动画化内容时,您可以使用SpriteKit来指定要执行的显式操作,或使用物理模拟引擎来定义物体的物理行为(如重力,吸引力或排斥)。
除了SpriteKit框架之外,还有Xcode工具用于创建粒子发射器效果和纹理地图集。您可以使用Xcode工具来管理应用程序资源并快速更新SpriteKit场景。
有关如何使用SpriteKit的更多信息,请参阅Sprite Kit编程指南。有关如何使用SpriteKit构建工作应用程序的示例,请参阅代码:Explained Adventure。
网友评论