您好,欢迎来到华佗小知识。
搜索
您的当前位置:首页iOS8-3人机界面指南(中文版)(三):iOS技术

iOS8-3人机界面指南(中文版)(三):iOS技术

来源:华佗小知识
iOS人机界面指南(三):iOS技术

iOS人机界面指南(三):

iOS技术

ISUX原创翻译 2014.12

1 / 58

iOS人机界面指南(三):iOS技术

目录

3 iOS技术 ......................................................................................................................................... 3

3.1 应用扩展(App Extensions) ........................................................................................... 3

3.1.1 今天部件(Today Widgets) ................................................................................. 4 3.1.2 分享和动作扩展(Share and Action Extensions) ............................................... 7 3.1.3 图片编辑扩展(Photo Editing Extensions) ......................................................... 8 3.1.4 文档提供者扩展(Document Provider Extensions) ........................................... 9 3.1.5 自定义输入法(Custom Keyboards) ................................................................. 10 3.2 通知(Notifications) ..................................................................................................... 11 3.3 多任务处理(Multitasking).......................................................................................... 18 3.4 社交媒体(Social Media) ............................................................................................. 21 3.5 iCloud ................................................................................................................................ 22

3.6 电子卡包(Passbook)................................................................................................... 24 3.7 应用内购买服务(In-App Purchase) ........................................................................... 27 3.8 游戏中心(Game Center) ............................................................................................ 28 3.9 iAd富媒体广告(iAd Rich Media Ads) ......................................................................... 30 3.10 无线打印(AirPrint) ................................................................................................... 35 3.11 访问用户数据(Accessing User Data) ....................................................................... 36 3.12 快速查看(Quick Look) .............................................................................................. 38 3.13 声音(Sound) .............................................................................................................. 39

3.13.1 理解用户期望(Understand User Expectations) ............................................ 39 3.13.2 定义应用的音频行为(Define the Audio Behavior of Your App) ................... 40 3.13.3 管理音频中断(Manage Audio Interruptions) ............................................... 45 3.13.4 适时的处理媒体远程控制事件(Handle Media Remote Control Events, if Appropriate) ................................................................................................................. 47 3.14 VoiceOver ........................................................................................................................ 48 3.15 路线选择(Routing) ................................................................................................... 49 3.16 编辑菜单(Edit Menu) ............................................................................................... 53 3.17 撤销与重做(Undo and Redo) ................................................................................... 55 3.18 键盘和输入页面(Keyboards and Input Views) ........................................................ 58

2 / 58

iOS人机界面指南(三):iOS技术

3 iOS技术

3.1 应用扩展(App Extensions)

应用扩展可以延伸应用的使用范围。当用户使用其他应用时,应用扩展使得用户仍能使用你应用的核心功能。举个例子,当人们在Safari中浏览网页时,他们可以使用你的分享扩展来发送一张图片或一篇文章到你的社交网站上。或者当使用照片应用时,人们可能会使用你的图片编辑扩展来为一张图片加上一个滤镜效果。(在这些场景中,Safari和照片应用承载用户使用扩展的场景,因而被称为宿主应用(host apps)。)

你需要提交包含应用扩展的完整iOS应用到App Store(包含扩展的应用被称为容器应用(containing app))。在启用扩展之后,人们就可以在使用其他应用时,通过使用扩展来执行快速任务。例如,在邮件中浏览某个商品时,人们可以不用离开邮件应用就使用你的动作扩展来把商品添加到购物清单中。

表17-1列举了可以创建的iOS应用扩展类型。

表17-1应用扩展类型

应用扩展类型 人们使用扩展来做… 在通知中心中获得快速更新或者在今天视图中快速完成任务 发送到网站或者和他人分享内容 通过另一个应用的上下文信息来操作或查看内容 使用照片应用编辑图片或视频 今天部件(Today widget) 分享(Share) 动作(Action) 图片编辑(Photo Editing) 文档提供者(Document Provider) 自定义键盘(Custom keyboard) 进入和管理文档库 替换iOS系统键盘 以下指南适用于所有类型的应用扩展,针对特定类型应用扩展的指南请参阅后续章节。(如果想了解如何开发、调试和发布一个扩展,请参阅App Extension Programming Guide。) 3 / 58

iOS人机界面指南(三):iOS技术

确保是单任务。应用扩展并不是应用的精简版,它帮助用户在有全局目标的上下文中完成狭义范围内的有限任务。例如,动作扩展可以为用户提供一种不同的方式来查看当前内容。

保证用户的交互是有限和流畅的。好的应用扩展应该只需几步点击就可以帮助人们完成任务,这样他们就能尽快回到之前的场景中。例如,分享扩展只需一次点击即可完成一张图片的分享。

将容器应用及其应用扩展的名称保持一致。一个容器应用中如果有多个扩展,需要使用不同的名称,你需要确保用户能够理解你的扩展和应用之间的关系。人们会在很多不同的情况下遇到扩展,如果他们当下没有认出来,那么他们就未必会信任这些扩展。

大部分情况下,复用容器应用的图标。显示用户熟悉的图标是获得用户信任的另一种方式。请注意,对于动作扩展来说,你应该使用单色版本的容器应用图标(详见分享和动作扩展)。

重要:和设计图标和图形一样,不要重复使用iOS的图标和图片,不要为苹果的产品和设计再设计一套图片。

避免在扩展上显示模态视图。很多扩展默认以模态视图来显示,所以应避免再叠加模态视图。尽管有时候用户可能会在扩展上遇到警告框,但是在设计扩展的流程时,应避免出现模态视图。

3.1.1 今天部件(Today Widgets)

人们会在通知中心的今天区域中查看今天部件(Today widgets)。因为人们会设置今天区域以显示他们最关注的信息,所以在此进行设计可以有效帮助你的部件在这些用户最重要的信息中占据一席之地。

4 / 58

iOS人机界面指南(三):iOS技术

设计与通知中心风格一致的外观。当使用通知中心的默认边距和背景时,你的今天部件就会给用户以统一的体验。为获得最佳的结果,你应该重点关注你的内容而不是背景或者其他的,尤其应该避免绘制一片纯色背景。

注意:iOS会自动在自定义的部件内容上方显示应用的图标和标题(图标会显示在标题前面的空白处)。

将部件内容与标题对齐。当你的部件内容与标题对齐时,人们就可以很简单地浏览今天视图中他们想要的部件。遵守今天视图中的边距规范,并将内容约束在如图的部件内容区内。

5 / 58

iOS人机界面指南(三):iOS技术

一般情况下,使用白色的系统字体来显示文本。在通知中心默认背景下白色文字会看起来较好。对于二级文本,可以使用系统提供的vibrant外观样式(查看notificationCenterVibrancyEffect了解更多)。

提供通知中心式的体验。人们访问通知中心来获取简要的更新或者执行一个非常简单的任务,所以今天部件最好只显示适量的信息和进行有限的互动,特别是:

 避免用户在部件中需要滚动或纵向移动来查看全部的信息。部件可以通过纵向扩展来显示更多的信息,但若部件的高度超过通知中心的高度就不是一种好的体验了,因为这样会干扰其他部件的查看。

 

避免使用横向扫动或拖曳,因为这会干扰在通知中心进行导航。

尽可能使用户只需一步操作就完成任务或打开你的应用(注意,在今天部件中键盘是

不可用的)。 优化性能以便人们可以即刻获得有用的信息。可以考虑在本地缓存信息,以便当有更新时就可显示最近信息。人们只希望在今天视图中花很少的时间,如果部件使用内存不当,iOS就可能会终止它。

在适当情况下,让人们点击你的今天部件来打开你的应用。因为今天部件提供了专一的体验,所以就能有效引导人们去到你的应用以获取更多信息或功能。最好不要显示“打开应用”按钮,而是应该让你的整个今天部件都可被点击来打开应用。你也可以让用户点击部件中的UI对象,以打开你的应用并跳转到关于此UI对象的视图中。举个例子,日历部件显

6 / 58

iOS人机界面指南(三):iOS技术

示了今天的事件,如果用户想要获得某个事件的更多信息,他们可以点击部件中的事件来打开日历应用进行查看。

注意:虽然从部件打开应用的方式对用户来说还不错,但继续在部件中提供有用且及时的信息依然是很重要的。人们可不一定会欣赏一个功能只是打开应用的今天部件。

3.1.2 分享和动作扩展(Share and Action Extensions)

人们通过点击应用中的动作按钮(Action button)来使用分享和动作扩展。在通过动作按钮显示的动作视图控制器(activity view controller)中,动作扩展被列在底部,分享扩展被列在动作扩展之上。人们可以使用更多(More)按钮来管理显示在动作视图控制器中的分享和动作扩展。

分享或动作扩展通常被认为是在当前用户场景下用来输入内容之用。例如,当在Safari中阅读一篇文章时,用户可能会点击动作按钮并使用一个分享扩展来发送这篇文章到分享网站上,也可能会使用一个动作扩展来查看这篇文章的翻译。

7 / 58

iOS人机界面指南(三):iOS技术

注意:在动作视图控制器中,iOS只会显示支持当前内容类型的动作扩展。例如,当用户当前内容是视频时,iOS就不会显示支持文本的动作扩展。

尽可能在分享扩展中使用系统提供的UI。系统所提供的撰写视图控制器(compose view controller)提供给用户一种一致的体验,并能自动支持一些常用任务,例如预览和确认标准项,同步内容,查看动画,以及完成一封邮件。欲知更多关于使用系统提供的撰写视图控制器,请参见App Extension Programming Guide中的Share。

如果上传需要一定时间,那就应考虑在分享扩展的容器应用中显示上传进度。无论分享的文件有多大,人们都期待在点击扩展中的发送或分享按钮后,能立即返回他们之前的场景。你需要让进度状态随时更新,但是人们不想每次上传完毕后都收到通知,并且也无法自动重启扩展。在这种场景下,在容器应用中显示上传进度是一种解决方案,这样容器应用就可以在后台处理任务,并在遇到问题时发送通知。

动作扩展使用单色的应用图标。(不同的是,分享扩展则应该使用其容器应用的彩色应用图标。)要为动作扩展设计图标时,你可能需要从创建一个应用图标的模版开始着手。如有需要,可以专注图标所特有的元素来进行简化设计。

如果你在容器应用中提供了多个动作扩展,那么最好为他们设计一套图标,且确保这套图标中的每一个看起来都与容器应用的图标是有关联的。

3.1.3 图片编辑扩展(Photo Editing Extensions)

当人们在照片(Photos)应用中查看图片或视频时,可以使用图片编辑扩展。一般来说,图片编辑扩展能帮助用户筛选图片或进行一些其他的图片或视频编辑。在用户确认之后,编辑后的内容就会出现在照片应用中。

照片应用提供了一个模态视图来显示图片编辑扩展的自定义UI。当用户在确认对图片或视频的编辑时选择了取消(你必须要在代码上保证存在这个行为),照片应用还可以显示一个确认视图。

8 / 58

iOS人机界面指南(三):iOS技术

避免在图片编辑扩展中使用导航栏。如图所示,承载扩展的模态视图已经包含了导航栏,若再增加另一个导航栏,既会占据更多你的界面空间,还会使用户产生困扰。(照片应用默认会以全屏高度来显示你的视图,所以你的内容会出现在内建的导航栏之下。)

如果可以,让用户能够预览编辑结果。尽可能让用户在关闭扩展返回照片应用之前看到他们编辑的成果。

3.1.4 文档提供者扩展(Document Provider Extensions)

文档提供者扩展帮助人们在其他各种应用中查阅你的应用所管理的文档。在宿主应用(host app)中,文档采集视图控制器(document picker view controller)会显示你的扩展所提供的UI(想要了解更多有关文档采集视图控制器的内容,请查阅UIDocumentPickerViewController Class Reference)。

注意:文档提供者扩展由两个不同的部分组成:文档采集视图控制器扩展和文件提供者扩展。文档采集视图控制器扩展包括了你的自定义UI,文件提供者扩展实现对文件的访问。

9 / 58

iOS人机界面指南(三):iOS技术

本节所使用的术语文档提供者扩展(Document Provider extension)是为了表述扩展中文档采集视图控制器部分的UI和体验。

避免在文档提供者扩展中使用导航栏。iOS会显示扩展的自定义UI,而自定义UI又包含在文档采集视图控制器中基于导航栏的界面之中。所以,在内建导航栏之下再显示第二个导航栏会使用户感到困惑,并且还会占据原本你的内容区域。(文档采集视图控制器默认会以全屏高度来显示你的视图,所以你的内容会出现在内建的导航栏之下。)

3.1.5 自定义输入法(Custom Keyboards)

人们使用带有自定义输入法的输入法扩展来替换iOS的自带输入法。在启用输入法扩展之后,除了受保护的文本区域(例如密码输入区)和手机键盘区(例如联系人中的电话号码区)外,当人们点击任何文本输入区域后就能使用自定义输入法。

10 / 58

iOS人机界面指南(三):iOS技术

为用户提供明显的方式来切换输入法。人们对于iOS的输入法切换按钮很熟悉,他们会期望在你的输入法中也有类似的体验。

3.2 通知(Notifications)

通知为人们提供即时的重要信息和功能。人们能在多种情况下收到通知,例如在锁屏界面中,或者在使用应用时,或者访问通知中心时。

通知中心有两种视图:通知(Notifications)和今天(Today)。

今天视图显示了一组可编辑的部件。今天部件是一个应用扩展,显示了少量及时和重要的信息或功能,这些信息或功能则是由用户所关注的应用所提供。举例来说,日历部件只显示了今天的事件。点击日历部件中的一个事件可以唤起日历应用,并打开该事件,用户接下来可以编辑该事件或管理其他的事件。想要了解更多关于设计今天部件的内容,请参见今天部件。

11 / 58

iOS人机界面指南(三):iOS技术

通知视图会显示用户感兴趣的应用所发出的最近通知。用户可以在设置(Settings)中来设置是否在通知中心显示该应用的通知。

12 / 58

iOS人机界面指南(三):iOS技术

iOS应用可以使用通知来让人们知道一些有趣的事情是什么时候发生的,例如:

   

收到一条消息 事件即将发生 有新的数据可下载了 某些状态发生了变化

在iOS8及之后的版本中,应用可以定义用户在通知中的操作。例如,用户可以在待办事项应用的通知中就标记该事项已完成,而无需额外打开应用。

iOS定义了两种类型的通知。

 本地通知(local notification)由应用安排待发送,最终通过iOS发送到同一设备中,无论该应用当前是否正在后台运行。例如,日历或待办事项应用可以安排一条本地通知来提醒人们一个即将到来的会议或者日期。

 远程通知(remote notification)(也称为推送通知(push notification))是由应用的远程服务器通过苹果推送通知服务来发送的,这类通知最终会被推送到所有安装了该应

13 / 58

iOS人机界面指南(三):iOS技术

用的设备。例如,一款在线竞技类的游戏,用户可以和其他玩家竞赛的,可以更新所有玩家的最新状态。

注意:应用扩展可能会要求远程通知必须发送到它的容器应用。在这种场景下,容器应用常常会在后台运行来处理通知。想要了解更多关于应用扩展的内容,请参见应用扩展。

如果当你的应用正在后台运行时收到了本地或远程的通知,你就应该以你的应用所特有的方式将信息传达给你的用户。

为了确保用户能够自定义他们的通知体验,你应该尽可能多地支持以下的通知类型:

   

横幅(Banner) 警告框(Alert) 小气泡(Badge) 声音(Sound)

注意:在iOS8及之后的版本中,你必须对所有你想发送给用户的通知类型进行注册。当你第一次进行注册动作时,用户会遇到一个警告框,他们可以在其中操作来决定允许或拒绝所有来自你的应用的通知。不管用户选择的结果是什么,他们应始终能访问应用的设置来更改此项设置,或者设置他们想要接收的通知类型。

横幅(banner)是一个小而透明的视图,会出现在屏幕顶部并在几秒后消失。用户还可以看到在锁屏当中的横幅以及在通知中心中以通知形式出现的横幅。在横幅中,iOS会显示通知的内容和应用的小图标(欲了解更多关于小图标的内容,请参见 App Icon)。用户点击横幅来隐藏显示并切换到发送通知的应用。

14 / 58

iOS人机界面指南(三):iOS技术

除了默认的点击动作之外,当用户轻扫横幅时,你还可以定义两个动作按钮。点击通知动作按钮来隐藏横幅的显示并启动你的应用(可能是在后台)来执行动作。

通知警告框是显示在屏幕上的标准警告框视图,需要用户操作后才会隐藏。当用户点击Options按钮后,你需要提供并显示通知消息以及任何一个默认动作,或最多四个特定动作。警告框的背景样式不能做修改。

当用户点击警告框中的一个默认或自定义动作按钮时,iOS会同时隐藏警告框并运行你的应用(可能是在后台)。点击关闭或确定按钮会隐藏警告框而不打开应用。

15 / 58

iOS人机界面指南(三):iOS技术

小气泡(badge)是一个显示未读通知数量的红色小圆(小气泡显示在应用图标的右上角)。小气泡的大小和颜色不能做修改。

横幅、警告框和小气泡这三种通知都可以使用自定义或系统提供的声音。

在通知中谨慎使用具破坏性的动作。要确定用户有足够的上下文来避免意想不到的后果。为了帮助用户区分你所定义的破坏性动作,iOS会用红色来显示它。有时候,在应用执行破坏性动作之前,应该请求用户进行确认。举个例子,如果在锁屏的横幅(banner)中提供了一个破坏性动作,那么就应确保只有设备的主人才能执行该动作(你需要在代码上实现这一需求)。

16 / 58

iOS人机界面指南(三):iOS技术

为每个动作按钮提供自定义标题。创建一个简短的标题来描述清楚将要发生的动作。例如,游戏可能会使用“Play”作为标题来表明,点击这个按钮会打开应用来进行游戏。确保标题:

 

使用标题样式的大小写(title-style capitalization)

足够简短,能不被截断地显示在按钮内(也应确保测试各种语言文字的标题显示正

常)

不要为同一个事件重复发送通知。用户可以选择处理通知项;通知项在用户未处理前会一直显示。如果为同一事件重复发送通知,通知中心列表中会满是通知,用户就有可能会关闭你的应用的通知。

不要在通知消息中包含你的应用名称。自定义信息会在警告框和横幅中显示,也会在通知中心中以通知的形式显示。你无需在自定义信息中显示你的应用名称,因为iOS会在显示信息的同时自动显示应用名称。

为了使本地或远程通知信息更有作用,你应该:

 

专注于信息而不是用户的行为。避免告诉人们点击哪个按钮或如何打开你的应用。 足够简短,一两行就可以显示完整。较长的信息对于用户来说很难进行快速阅读,也会造成在警告框中需要滚动才能查看完整。

使用句式大小写(sentence-style capitalization),并配以合适的结束语句符号。可能的时候,可以使用一个整句。

注意:如有必要,iOS会缩短你的消息以便能在各种通知发送样式下显示;为了最好的效果,你不应主动缩减你的消息。

保持小气泡的内容是最新的。当用户注意到新信息时,即时更新小气泡非常重要,这样用户就不会觉得收到了额外的通知。注意,当小气泡为0时也会移除通知中心中所有对应的通知项。

重要:不要使用小气泡做通知以外的用途。记住,用户能够关闭应用的小气泡,所以你无法确定他们一定能看到小气泡中的内容。

17 / 58

iOS人机界面指南(三):iOS技术

当收到通知时,提供用户可以选择听到的音效。当人们没有在看屏幕的时候,可以通过音效获取他们的注意。例如,日历应用可能会在显示警告框的同时播放一个音效来提醒人们一个即将到来的事件。再如,协作任务管理应用可能会在小气泡更新时播放一个音效来告知某个远程协同的同事已经完成了某个任务。

你可以提供自定义的音效,或者使用内置的警告音。如果你创建了自定义音效,请确保它是简短的、有特色的并且是经由专业制作的。(想要了解更多关于音效的技术需求,请参阅Local and Remote Notification Programming Guide中的Preparing Custom Alert Sounds。)注意,当通知发送后,你无法以编程方式来触发设备的震动,因为用户对于警告框是否伴随震动拥有支配权。

3.3 多任务处理(Multitasking)

多任务处理让人们可以在最近使用的应用之间进行快速切换。

18 / 58

iOS人机界面指南(三):iOS技术

为了支持这样的体验,多任务处理会让一款应用在用户切换离开后,在后台进入挂起状态。当用户切换回来时,应用可以快速被重新使用,因为应用无需重新加载UI。人们使用多任务处理UI(如上图)来选择一款最近使用的应用。

API注释:想要学习在你的代码中如何支持多任务处理,请参阅App Programming Guide for iOS中的App States and Multitasking。

能否在多任务处理中处理好取决于能否在设备中与其他应用和谐共存。从更高的层面来说,这意味着所有的应用都应:

  

处理好中断或来自其他应用的声音

停止和重启,即快速平滑地从后台切换到前台 不在前台时应恪守己任

下述指南细则可以帮助你的应用在多任务处理中取得成功。

19 / 58

iOS人机界面指南(三):iOS技术

准备好被打断,并恢复。多任务处理增加了后台应用中断你的应用的可能性。其他特性,诸如广告出现和更快的应用切换,也会造成更频繁地打断。越快速和越精确地保存应用当前状态,人们就可以越快地重新运行应用,并从之前离开的页面继续使用。你可以通过利用UIKit的状态保存和恢复来为用户提供无缝的重新开始的体验(查看State Preservation and Restoration了解更多信息)。

确保你的UI可以处理两倍高度的状态栏。两倍高度的状态栏会在诸如通话、录音和共享等过程中出现。在未作处理的应用中,状态栏的额外高度会引起布局问题,如UI被向下挤压或者被遮住。在多任务处理环境中,使两倍高状态栏显示正常是格外重要的,因为它可能会出现在更多的应用当中。

准备好暂停需要人们注意或主动参与的活动。例如,如果你的应用是一款游戏或媒体观看应用,你需要确保你的用户从应用切换走时,不会丢失任何内容或事件。当人们切换回游戏或媒体播放器时,他们希望能继续之前的体验,就好像他们从未离开过应用。

确保音频行为合适。当你的应用正在运行时,多任务处理会使得其他媒体活动更可能地同时进行,也会有更多可能性使你的音频不得不暂停,并恢复处理中断。查看声音来帮助你确保你的音频能满足人们的期望,并与设备中的其他音频和平共处。

适度使用本地通知。应用可以在特定时间发送本地通知,无论应用是在暂停中还是运行中亦或是根本就没有运行。为了达到最好的用户体验,应避免用过多的通知来骚扰人们,并遵循通知中创建通知内容的指南。

必要时,在后台完成用户的任务。当人们开始一个任务时,他们通常会期望即使已经从应用中切换走了任务仍能够完成。如果你的应用在执行用户任务途中,并且这个任务不需要额外的用户交互,那么你就应该在应用挂起之前就在后台完成任务。

20 / 58

iOS人机界面指南(三):iOS技术

3.4 社交媒体(Social Media)

人们会期望在任何场景下都可以使用他们喜爱的社交媒体帐号。iOS以人们喜欢的方式将社交媒体的交互与你的应用进行了整合。

注意:当用户点击动作按钮时,他们会得到一个如上图的动作视图控制器。想要了解更多关于这个视图控制器的内容,请参见Activity View Controller。

动作视图控制器的中间一行显示了用户启用的和系统提供的分享应用扩展。想要了解更多关于设计分享扩展的内容,请参见Share and Action Extensions。

考虑在你的应用中为用户提供一种简便的方式来撰写邮件。用户有可能会启用分享扩展以便能在任何地方都可以发送内容。但是你也可以使用系统提供的撰写视图控制器来呈现给用户,他们可以在其中进行编辑操作。你可以在显示给用户进行编辑之前,预先加载具有自定义内容的撰写视图(在你呈现给用户之后,只有用户可以编辑这些自定义内容)。想要了解更多关于社交框架(Social framework)的编程界面,包括SLComposeViewController类,请参见Social Framework Reference。

21 / 58

iOS人机界面指南(三):iOS技术

可能时,避免要求用户登录进入一个社交媒体账户。社交框架(Social framework)会和帐号框架(Accounts framework)一起来支持一个单点登录模式,所以你可以获得授权来访问用户的帐号,而无需要求他们来重新授权。如果用户还没有登录进入一个帐号,你可以显示UI来让他们进行登录。

3.5 iCloud

iCloud可以让用户随时随地用不同的设备访问他们想要的内容。将iCloud集成到应用中,用户不用进行同步操作就可以在不同场景下使用不同的设备访问并编辑私人信息。

为了提供这种体验,你可能需要重新检查你的应用中现有的信息,尤其是用户自建内容的存储、访问和展示方式。想要学习如何使用iCloud,请参考iCloud Design Guide。 iCloud用户体验的一个基本方向是透明性:理想情况下,用户不需要知道他们的信息存储在什么地方,也不需要去思考当前浏览的信息是哪个版本的。以下几点可以帮助你创建用户期望的iCloud体验。

如果可以的话,让用户方便地启用iCloud。在iOS设备上,用户可以在设置中登录iCloud账户,因此多半用户会期望应用可以自动启用iCloud。但是如果你觉得用户可能需要自主选择是否使用你应用的云服务,你可以在用户第一次进入应用时提供一个简单的选项来进行设置。大多数情况下,这个选项应该为:是否将所有内容上传到云端。

22 / 58

iOS人机界面指南(三):iOS技术

注意用户iCloud空间大小。一定要记住iCloud空间是用户花钱买来的有限资源。你应该使用iCloud来存储用户自己创建和可理解的信息,避免将可再生的应用资源和内容存储在云端。同样要记住,当用户登录了iCloud账户时,你的应用的文件夹内容也会自动备份到云端。所以为了节省用户云端空间,你最好只挑选必要的信息存储于文件夹中。

避免让用户自己选择在iCloud上存储哪些文件。一般,用户会期望他们在意的所有信息都能够通过iCloud访问到。为了提供更好的用户体验,你可能想要重新构建处理和展示内容的方式,这样就可以给用户提供更多的文件管理功能。但实际上大多数用户都不需要进行个人文件存储的管理,所以你的应用也可以不用考虑这个问题。

决定哪种类型的信息需要存储在云端。除了存储用户自建的文件和内容,你还可以存储少量的其他信息在云端,例如用户当前的状态,用户的偏好设置等等。你可以使用iCloud的关键值存储来保存这类信息。例如,用户使用你的应用看了一个杂志,你可以使用iCloud的关键值存储来保存用户浏览到的位置,这样用户在别的设备上重新打开这个杂志时就能从上次离开的地方继续浏览了。

如果你使用iCloud的关键值存储来保存用户的偏好设置,确保用户在每个设备上都是想这样设置的。例如,有些偏好设置在工作环境中比在家里要更好用。在某些情况下,将偏好设置保存在应用服务器上要比保存在云端更合理,这样偏好设置就不会受iCloud的。

确保iCloud无法使用时应用的行为是合理的。例如,用户退出iCloud账户,关闭应用的iCloud或者进入飞行模式时,iCloud都是无法使用的。在这些情况下,用户都进行了某些操作来禁止iCloud服务,所以你的应用可以不用再进行提醒。但是,需要告诉用户在打开iCloud之前,当前做的修改在其他设备上都无法看到。

避免给用户创建本地文件的选项。不管你的应用是否支持iCloud,都不应该给用户提供因设备而区分的文件系统。相反,你应该希望用户关注通过iCloud访问文件的普适性。

在合适的时候自动更新信息。最好不需要用户来确认他们正在访问的是最新的内容。但是,也需要在用户设备存储空间和带宽之间做出平衡。如果你的用户要使用非常大的文件,那么让他们自己选择是否要从云端下载一个更新的文件可能更合适。如果需要这样

23 / 58

iOS人机界面指南(三):iOS技术

做的话,可以设计一种方式来指出当前在云端有一个该文件的最新版本。当用户选择更新时,如果下载时间较长最好给用户明显的反馈。

告知用户删除某文件的后果。当用户从有iCloud服务的应用上删除文件的时候,这个文件同样会从用户的iCloud账号和其他设备上删除。所以最好在执行删除操作之前告知用户删除的后果,让用户进行确认。

必要时尽可能早地告知用户冲突问题。使用iCloud编程接口,你需要在不打扰到用户的情况下解决大多数不同版本之间的冲突问题。但在有些情况下,你需要尽可能早地检测出冲突问题来避免用户在错误版本上浪费太多时间。你需要设计一种自然的方式来告诉用户有冲突存在,接着给用户提供方便的方式来区分不同版本以及做出决策。

确保在搜索中包括用户在云端的信息。使用iCloud的用户趋向于认为云端的信息是普遍可访问的,所以他们会期望搜索结果中也有云端的信息。如果你的应用允许用户搜索他们的信息,确保你使用了将搜索扩展到iCloud账户的接口。

3.6 电子卡包(Passbook)

Passbook应用是帮助用户查看和管理各种数字化票券的,例如登机证、优惠券、会员卡和各种票。你可以在应用中创建一个票券,向用户描述它,并且在有更改时进行更新。

24 / 58

iOS人机界面指南(三):iOS技术

使用PassKit框架可以方便地用自定义内容来收集一个票券到用户票券库中并访问它。(想要学习Passbook技术的核心概念和PassKit接口的使用方法,请参考Passbook Programming Guide。)以下几点可以帮助你创建一个用户乐意保留并使用的票券。

不要只是简单复制已有的物理票券。Passbook已经建立了有美感的设计,票券也都配合这种设计以看起来更好。所以不要只是复制物理票券的外观,抓住这次机会设计一个符合Passbook组成和功能的干净简洁的票券样式。

对放在票券正面的信息精挑细选。用户期望扫一眼票券就能快速获得他们需要的信息,所以票券正面的信息应该是整洁且易读的。如果有用户可能会需要的额外信息,将它们放到票券的背面要比挤在正面好得多。

通常情况下,避免使用纯白色背景。通常,一个好看的票券应该使用鲜艳的纯色背景或者使用强烈的,充满活力的图片作为背景。当然,在设计背景时还要确保内容的可读性。

注意:最好在票券的合适区域展示所有的文本内容,并且避免将文本嵌入图片或使用自定义的字体。这样做有两个好处:它方便使用VoiceOver的用户获得票券中的所有信息并且

25 / 58

iOS人机界面指南(三):iOS技术

可以使你的票券有一致的外观。(译者注:VoiceOver是一种帮助视障人士的语音辅助程序。)

在商标文本区域显示你的公司名称。所有票券的商标文本区域的文字都使用了统一的字体。为了避免和其他票券发生冲突,还是建议您在商标文本区域输入文字,不要使用自定义字体。

使用单色的公司商标。商标图片放置在票券左上角公司名称的旁边。最好提供一个单色的,不包含文字的商标。如果你想要增强商标的效果,又想要与文字风格匹配的话,可以增加一个在y轴方向上有1像素偏移,有1像素模糊和透明度为35%的黑色阴影效果。

如果可以的话,使用长方形的条形码。类似于PDF417这样的长方形条形码比正方形二维码更适合票券的布局。如下右图所示,正方形的二维码会使两边有空白区域并且会在垂直方向上使上下方内容变得拥挤。

为性能优化图片。因为用户通常会通过电子邮件或者浏览器接收票券,所以下载的越快越好。为了提高用户体验,使用能满足视觉效果的最小的图片文件。

在合适的时候更新票券以增强其效用。即使一个票券代表的物理实体并不会改变,数字的票券也可以通过映射真实世界的一些事件来提供更好的用户体验。例如,当某个航班延误

26 / 58

iOS人机界面指南(三):iOS技术

时你可以更新登机牌上的信息,这样用户就能够通过查看电子登机牌来获得当前的信息了。

3.7 应用内购买服务(In-App Purchase)

应用内购买服务使用户可以在你的应用、你设计的商店中购买数字产品。

例如,用户可能:

   

将一个应用从基础版升级到高级版 每月订阅新内容

购买虚拟商品,例如游戏中的等级或道具 购买并下载新书

重要:应用内购买服务只提供支付功能,其他功能由你自己提供,例如向用户展示商品,解锁内置功能,从你自己的服务器上下载内容等等。当然,你所提供的所有商品都必须在应用商店注册过。

想要了解添加购买功能的技术问题,请查看In-App Purchase Programming Guide。想要了解应用内购买的商业问题,请查看App Store Resource Center。当然,你还应该查看许可协议来确定你的应用出售哪些商品以及如何提供商品。

27 / 58

iOS人机界面指南(三):iOS技术

你可以使用StoreKit框架在你的应用中嵌入一个商店并且支持应用内购买服务。当用户进行购买时,StoreKit连接到应用商店进行安全支付,然后再告知你的应用来提供购已购买的商品。

以下几点可以帮助你设计用户喜欢的购买体验。

将商店体验集成到你的应用中。在展示商品和处理用户交易时,给用户提供一致性的体验。你一定不想让用户在访问你的商店时感觉进入了另一个不同的应用。

使用简短简洁的标题和说明。最好能让用户在扫过一组条目时快速发现感兴趣的内容。用户更容易理解不需要截断隐藏的简单直接的语言和标题。

不要替换默认的确认提醒框。当用户购买一个商品时,StoreKit会提供一个确认提醒框(上方有展示)。这个提醒框可以帮助用户避免意外购买,所以不要修改它。

3.8 游戏中心(Game Center)

游戏中心给用户提供玩游戏,组织在线多人游戏以及其他更多的功能。玩家可以使用内置的游戏中心应用来注册一个账户,发现新游戏,添加好友,浏览玩家排名和战绩成就。

28 / 58

iOS人机界面指南(三):iOS技术

作为一个游戏开发商,你可以使用GameKit接口发送分数和战绩到游戏中心的服务器上,在你的游戏页面中显示玩家排名,帮助用户找到其他玩家。想要学习如何将游戏中心集成到你的应用中,请查看Game Center Programming Guide。 以下几点可以帮助你给用户提供好的游戏中心体验。

不要使用自定义的界面来提示用户登录到游戏中心。如果用户在未登录到游戏中心的情况下打开了一个需要启用游戏中心的应用,系统会自动提醒他们登录。所以自定义登录界面没有存在的必要,而且有可能使用户感到困惑。

一般情况下,使用标准的游戏中心界面。在少数情况下,可能有必要自定义游戏中心的界面,但是这样做有使用户感到疑惑的风险。标准游戏界面是iOS和OS X用户熟悉的,而且它会给用户一种置身于一个大的游戏社区的感觉。

29 / 58

iOS人机界面指南(三):iOS技术

给用户提供关闭语音聊天的途径。有些用户可能不想在进入游戏时自动开启语音聊天功能,而且大多数用户希望在特定情境下可以关闭语音聊天。

3.9 iAd富媒体广告(iAd Rich Media Ads)

如果你允许你的应用中出现广告,那么你就可以通过用户浏览或者点击广告获得收益。(这里是一个放置iAd横幅(banner)的简单示例。)

iAd网络提供的广告都会有一个确定的样式。最简单的,这种样式可以是一个作为入口的横幅广告。当用户点击这个横幅时,广告执行预排程序的动作,例如播放一段影片,展示可交互的内容或者启动浏览器打开一个页面。这个动作展示的内容会盖住你当前的界面,或者使你的应用转换到后台运行。

30 / 58

iOS人机界面指南(三):iOS技术

有三种类型的横幅:标准(standard),中等矩形(medium rectangle)和全屏(full screen)。所有类型的横幅都提供同样的功能,就是引导用户进入广告,只是它们的外观和行为不同。

标准横幅(standard banner)占用屏幕较少的空间,通常从始至终都可见。你可以选择在应用的哪些页面显示标准横幅,并且在这些页面布局时给横幅留出空间。

所有的iOS应用都可以展示标准横幅。你可以使用ADBannerView类中的视图来显示标准横幅。

中等矩形横幅(medium rectangle banner)的行为和标准横幅相同,同样也可以选择展示中等矩形横幅的位置。

31 / 58

iOS人机界面指南(三):iOS技术

中等矩形横幅只能在iPad应用中使用。你可以使用ADBannerView类中的视图来显示中等矩形横幅。

全屏横幅(full screen banner)会占用屏幕的大部分甚至是所有空间,并且通常只在应用程序流的特定时间或特定位置显示。你可以选择使用模态显示横幅或者用的页面来展示可滚动的内容。(在下面的示例中,应用提供了一种杂志阅读的体验,通过翻页离开或回到全屏广告页面。)

32 / 58

iOS人机界面指南(三):iOS技术

你可以使用ADInterstitialAd类中的视图来显示全屏横幅。

iAd框架包含了所有类型的横幅,并且会在右下角显示iAd的标识。iAd框架的设计固定在屏幕底部时最好看。

为了保证无缝的集成和提供最好的用户体验,可以遵循以下几点。

将标准横幅尽量放置在屏幕底部或底部附近。这个位置的差别取决于底部是否有栏(bar)以及是什么样的栏。

栏 屏幕底部没有栏 屏幕任何地方都没有栏 底部有工具栏(toolbar)或者选项卡(tab bar) 标准横幅的位置 屏幕底部 屏幕底部 底部栏上方 将中等矩形横幅放置在不会干扰内容的地方。和标准横幅一样,中等矩形横幅也最好放置在屏幕底部或底部附近。放在底部附近也能减少干扰用户的可能性。 33 / 58

iOS人机界面指南(三):iOS技术

用户体验中有中断时使用模态展示全屏横幅。如果你的应用中有自然中断或者情景转换,模态展示的风格会更合适。当你模态展示全屏横幅时(通过使用

presentFromViewController实现)用户要么进入广告,要么关闭它。出于这个原因,当用户有做出转变的预期时(例如完成了一个任务后)用模态展示形式比较好。

应用视图中有转场切换时不要使用模态展示全屏横幅。如果用户在使用你的应用时会频繁的进行屏幕切换操作,例如杂志翻页或翻阅一些条目集合,此时使用非模态的形式会更合适。当你使用非模态来显示全屏横幅时(通过使用presentInView实现),可以在界面中保留栏(bar)让用户通过应用控件进入或退出广告。和其他横幅广告一样,点击全屏横幅会启动iAd体验,但是如果条件允许,你也可以在应用中支持横幅内的其他手势操作(例如拖动或滑动)。

确保使用合适的动画效果来显示和隐藏非模态的全屏横幅视图。例如,杂志阅读应用可以用和杂志翻页一样的动画效果。

确保横幅在应用中出现的时间和位置的合理性。用户只有在不觉得广告打扰了他们时才可能进入iAd。这点对于游戏这样的沉浸式应用尤其重要:你肯定不想将横幅放置在影响用户玩游戏的位置。

避免将横幅放置在用户只一扫而过的页面。最好不要将横幅放置在用户会快速略过的页面。因为通常用户在一个页面停留1、2秒后才可能点击一个广告。

尽可能的支持双向展示横幅广告。最好让用户在使用应用时不必旋转设备就能浏览广告。当然,支持双向也能给你的广告提供更大的区域。想要学习如何确保转换方向时横幅能正常响应,请查看iAd Programming Guide。

不要让标准或中等矩形横幅滚出屏幕。如果你的应用需要滚动来展示内容,确保横幅一直固定在它的位置上。

当用户浏览广告或与广告进行交互时,暂停那些吸引用户注意力或需要操作的活动。当用户选择浏览广告时,他们不想因此错过应用中的事件,也同样不想让应用打断广告体验。一个好的方法是像应用转入后台运行那样暂停当前活动。

34 / 58

iOS人机界面指南(三):iOS技术

除非有特殊情况,否则不要中断广告。一般情况下,在用户浏览并与广告交互时,应用还是在继续运行并接收事件的,所以也有可能突然出现一个事件需要获得用户的注意力。然而,需要打断广告的场景其实非常少。有一种情形是应用提供互联网语音协议服务(VoIP)。在这种应用中,有电话接入时可能会取消正在运行的广告。

注意:取消广告可能会对应用能接受的广告类型以及能获取的收益有不好的影响。

3.10 无线打印(AirPrint)

用户可以通过AirPrint无线打印应用中的内容,还可以使用打印中心应用检查打印任务。

你可以使用内置的支持程序来打印图片和PDF文件,或者可以使用特定的打印程序接口来做自定义的格式设置和渲染设置。iOS会处理打印机的发现,任务的排序以及在指定打印机上执行打印任务。

通常来讲,用户想要打印文件的时候,只需要点击应用中的标准动作按钮(Action button)。当他们选择了要打印的条目后,可以选择打印机,设置打印属性,最后点击打印按钮开始打印。

打印中心应用是一个只有在处理打印任务时才可见的后台系统应用,用户可以用它来查看打印任务。用户可以在打印中心浏览当前打印队列,查看某个打印任务的详情,还可以取消某个任务。

35 / 58

iOS人机界面指南(三):iOS技术

只需添加少量代码就可以支持基本打印功能(想要学习在代码中添加打印功能,请查看Drawing and Printing Guide for iOS)。想要确保好的打印体验,可以遵循以下几点:

使用系统提供的动作按钮。用户对系统提供的按钮的含义和行为都很熟悉,所以尽可能的使用系统动作按钮。如果你的应用没有工具栏或导航栏,那就要另当别论了。在这种情况下,你就需要自己设计一个可以出现在应用主界面的打印按钮,因为动作按钮只能在工具栏和导航栏中使用。

在当前情境下打印操作是基本功能时才显示打印项(Print item)。如果当前情境并不适合打印,或者用户并不想打印,就不要将打印项显示出来。

在合适的时候给用户提供更多打印选项。例如,让用户设置打印页码范围或打印份数。

如果用户不能打印,则不要显示特定的打印页面。在向用户展示有打印项的界面前,确保用户的设备是支持打印的。学习如何在代码中实现,请查看UIPrintInteractionController Class Reference。

3.11 访问用户数据(Accessing User Data)

位置服务允许应用获取用户当前大致的地理位置,设备指向的方向以及用户移动的方向。其他系统服务,例如通讯录、日历、备忘录和相册等,同样也允许应用访问用户存储在里面的数据。

虽然获取了用户数据的应用能带来一定的方便,但还是需要为用户提供维持信息私密性的功能。例如,用户喜欢应用自动给内容加上位置标签,或者可以找到附近的好友,但用户

36 / 58

iOS人机界面指南(三):iOS技术

也需要能在不想分享位置的时候关闭这些功能。(想要学习如何给应用增加获取位置功能,请查看Location and Maps Programming Guide。) 以下几点可以帮助您以用户不反感的方式获取用户数据。

确保使用户理解分享私人数据的原因。如果没有明显的需要,用户自然会对私人信息的请求感到怀疑。为了避免用户反感,确保在用户使用明显需要个人信息的功能时再进行提醒。例如,即使没有打开位置服务用户也可以使用地图,但是在用户使用定位或导航功能时就会有提醒。

应用需要个人信息的原因不明显时向用户做出解释。你可以在提醒框中给出文字性的描述,例如“这个应用需要访问你的通讯录”或者“是否允许应用获取你的地理位置?”。这些文案最好明确且有礼貌以让用户无压力的理解为什么需要访问他们的信息。

讲述原因的文案应该:

 

不要包含你的应用名称,因为系统提供的提醒框已经包含了。

清楚地描述你的应用为什么需要这些数据。如果可以的话,你也可以解释不会用这些

数据做什么。

使用以用户为中心的术语并且进行本地化。

在易于理解的情况下越短越好。尽可能避免超过一句话。

使用句式大小写(sentence-style capitalization)。(句式大小写指的是第一个单词大写,除了专有名词和专有形容词以外的词都小写。)

  

只有当你的应用没有用户数据就无法提供基础服务时,才在一开始就征求用户的许可。如果你的应用在知道了用户私人信息后才能提供主要功能是显而易见的话,用户不会因此觉得烦扰。

避免在用户选择需要数据的功能之前调用触发提醒框的程序。这样,就可以避免用户疑惑为什么在使用不需要私人数据的功能时有请求提醒。(注意,检查用户位置服务的设置并不会触发提醒。)

37 / 58

iOS人机界面指南(三):iOS技术

检查位置服务的设置来避免触发没必要的提醒。你可以使用核心位置的程序接口来实现(想要学习如何做,请查看Core Location Framework Reference)。使用这些知识,可以尽可能地在使用需要位置信息的功能时才进行提醒,或者完全避免提醒。

3.12 快速查看(Quick Look)

使用Quick Look,用户可以在你的应用内预览文件,即使你的应用是打不开这个文件的。例如,你可以允许用户预览一些从网站上下载或从其他来源收到的文件。

想要学习如何在应用中加入Quick Look文件预览功能,请查看Document Interaction Programming Topics for iOS。

用户在应用中预览文件之前,可以在你自定义的视图中查看文件的信息。例如,用户从一封邮件中下载了附件之后,邮件应用(Mail)会在邮件中以自定义的视图展示文件的图标、标题和大小。用户可以通过点击它来预览文件。

你可以在应用中用一个新的视图来显示文件预览,使用全屏或者模态视图。展示的形式取决于你的应用运行在什么设备上。

在iPad上可以使用模态视图显示文件预览。iPad的大屏幕很适合在一个方便用户离开的沉浸式环境中展示文件预览。缩放操作(zoom transition)很适合显示预览。

38 / 58

iOS人机界面指南(三):iOS技术

在iPhone上可以使用专用的视图,最好是导航视图来显示文件预览。这样可以使用户在应用情境中通过导航进入文件预览。虽然也可以在iPhone应用中使用模态显示,但并不推荐这样。(注意缩放操作在iPhone上并不适用。)

当然,在导航视图中显示文件预览可以在导航栏上放置特定的预览控件。(如果你的视图有工具栏,Quick Look会将预览控件放在工具栏上。)

3.13 声音(Sound)

无论声音是你的应用的主要内容的一部分,还是锦上添花的元素,你都需要知道用户对声音的期望以及与如何满足这些期望。

3.13.1 理解用户期望(Understand User Expectations)

人们可以使用设备控件来改变声音,也可能使用有线或无线的耳机和听筒。人们也会对于他们的行为如何作用于他们听到的声音有各种各样的期望。虽然你可能发现有一些期望很让人意外,但它们都会遵循用户控制的原则,即应是用户而非设备掌控听到声音的时机。 用户会依据需要将设备静音:

 避免被突兀的音效打断,比如手机铃声和信息接收音等

 避免听到作为用户操作副产品的音效,比如键盘或其他反馈音、偶然的声音或应用启

动的声音

 避免听到那些玩游戏时不必要出现的音效,如音效和配乐

例如,在剧院中,用户将他们的设备调至静音以避免打扰剧院中的其他人。在这一情境下,用户仍然希望能在他们的设备上使用应用,但他们不希望被无预期或突兀的声音所打断,如手机铃声或新消息音。

在用户进行单纯操作和有明确期望的操作时,铃音/静音开关(或静音开关)不会屏蔽这些操作所导致的的声音。例如:

39 / 58

iOS人机界面指南(三):iOS技术

 媒体应用中的媒体播放是不会被静音的,因为媒体播放是用户明确要求的。  闹钟不能被静音,因为闹钟是用户明确设置的。

 语言学习应用中的音效素材不能被静音,因为用户进行了明确的操作希望听到它。  音频对话应用中的对话不被静音,因为用户打开这个应用的唯一目的就是进行音频对

话。

用户使用设备的音量键调整所有音效的音量,包括歌曲、应用音效和设备声音。用户能使用音量按钮屏蔽所有声音,无论铃声/静音(或静音)的开关在什么位置。使用音量键调整应用当前所播放的音频时同样调整了全局系统的音量,只有铃声音量除外。

对于iPhone:当没有音频播放时使用音量键可以调整铃声音量。

用户使用耳机可以私密地接听声音并他们的双手。不管这些配件是有线或无线的,用户都对用户体验有特定的期待。

当用户插入耳机或连接无线音频设备时,他们意图继续收听当前的音频,但是是以私密的状态。由于这一原因,他们希望当前正在播放音频的应用能继续不中断地播放。 当用户拔出耳机或断开与无线设备的连接时(抑或设备超出范围或关闭时),他们不希望他们刚刚收听的内容被自动地与他人分享。基于这一原因,他们希望正在播放音频的应用暂停播放,并可以允许他们在愿意时能容易地重新开启播放。

3.13.2 定义应用的音频行为(Define the Audio Behavior of Your App)

如果必要的话,你可以调整相关的、的音量水平以在你的应用音效输出端制造出最好的混音。但是,最终音效输出的音量也应该能被系统音量所控制,无论是通过音量键还是音量滑条进行调节。这意味着应用的音频输出的控制权仍在它所属的用户手中。 确保你的应用适时的显示音频路径选择。(音频路径(audio route)是指音频信号的电子通路,例如源于设备的耳机或是设备的扬声器。)即使人们没有物理性的插入或拔出音频设备,他们也仍希望能选择一个不同的音频路径。为了实现这一功能,iOS能自动显示一

40 / 58

iOS人机界面指南(三):iOS技术

个控件来允许用户选择一个输出音频路径(使用MPVolumeView类能允许这个控件显示在你的应用中)。由于选择不同的音频路径是用户主动的行为,用户期望当前播放的音频能继续不中断。

如果你需要显示音量滑条并使用MPVolumeView 类时,确保使用系统原生的音量滑条以保证可用。要注意,当激活的音频输出设备不支持音量控制时,要使用合适的设备名称来替代音量滑条。

如果你的应用只产生一些与其功能无必要关系的界面音效时,(尽量)使用系统音效服务(System Sound Services)。系统音效服务是iOS系统下产生警示音、界面音效和调用振动的技术;它不适合任何其他用途。当你使用系统音效服务来产生音效时,你无法干涉你的音频与设备的音频的交互方式,也无法干涉设备配置变化和干扰的响应方式。如想了解如何使用这一技术,参阅Audio UI Sounds (SysSound) 中的范例项目。 如果音效在你的应用中扮演重要的角色,使用音频会话服务(Audio Session

Services)或是 AVAudioSession类。这些程序接口不产生音效;相反,它们会帮助你了解你的音频应该如何与设备的音频进行交互以及如何响应设备配置的干扰与变化。 对于iPhone:无论你使用什么样的技术来制作音频,无论你如何定义来它的行为,手机总是可以中断当前运行的应用。这是因为任何应用都不应该阻止人们接收来电。

在音频会话服务中,音频会话(audio session)执行了你的应用与系统之间音频中介的功能。音频会话中最重要的方面之一就是类目(category),它定义了你的应用的音频行为。

为了实现音频会话服务带来的好处并能提供用户期望的音频体验,你需要选择可以完美描述应用音频行为的类目。具体情况取决于你的应用只在前台播放音频还是也要在后台播放音频。在你做这一选择的时候,遵循以下这些原则:

 依据其语义而非精确的行为来选择音频会话类目。通过选择目的清晰的类目,你可以

确保你的应用能表现得符合用户期望。除此之外,当以后行为的精确集合被重新定义时,它可以为你的应用提供最佳的机会使其合理运行。

 在极少数情况下,可以添加属性到音频会话中以修正一个类别的标准行为。一个类别

的标准行为代表多数用户的期望,因此在你改变那个行为之前你应该仔细地考虑。例如,你可能要添加“闪避”属性以确保你的音频声音能比其他所有的音频都大(除了

41 / 58

iOS人机界面指南(三):iOS技术

手机音频),如果你的用户对你的应用是如此期望的话。(欲了解更多关于音频会话属性的内容, 请参见Audio Session Programming Guide中的Fine-Tuning the Category章节。)

 依据设备当前的音频环境来考虑你的类目选择。这也许意味着,例如,用户在使用你

的应用时可能听着其它的音效而非你的配乐。如果你这样做,要确保避免当你的应用启动时,迫使用户停止收听当前的内容或要需要额外地在两者之间做出选择。  通常来说,要避免在你的应用运行时改变类目。改变类目的首要依据是你的应用是否

需要在不同的时机支持记录和播放。在这种情况下,更好的选择是依据需要在录音类目与播放类目之间转换,而非选择播放和录音类目。这是因为选择录音类目可以确保正在录音时不会听到警告音,比如来信提示音。

表31-1列举了你可以使用的音频会话类目。不同的类目可以允许通过铃声/静音开关或静音开关(或设备锁)来实现静音、与其他的音频混合或者控制应用在后台播放。(欲了解编程界面上所呈现的的类目和属性的准确名称,参见《音频回话编程指引》。)

表31-1 音频会话类目以及相关的行为

类目 意义 声音增强了应用的功能且应该静音其他音频 声音增强了应用的功能且应该静音其他音频。 声音对应用来说很重要且可能与其他音频混合。 静音 混合 后台播放 个人环境 支持 不支持 不支持 环境 支持 支持 不支持 播放 不支持 不支持 不支持(默认)支持(当“与其他音频混合”属性被添加时) 支持 录音 音频是用户记录的。 声音代表音频输入与输出,可以按顺序或同时。 不支持 支持 播放和录音 不支持 42 / 58

不支持(默认)支持(当“与其他音支持

iOS人机界面指南(三):iOS技术

频混合”属性被添加时) 应用执行硬件辅助音频编码(不播放或录音)。 音频处理 不适用 不支持 支持 *如果你选择音频处理类目并且你希望在后台运行音频进程,你需要在完成音频处理之前防止你的应用被暂停。欲了解如何实现这一功能,参见《iOS应用编程指南》中的执行长时间运行的后台任务。

以下是一些示例场景,其中指示了如何选择音频会话类目以提供用户喜欢的音频体验。 场景1:一个帮助人们学习新语言的教育类应用。你需要提供:  用户点击特定控件时播放反馈音效

 当用户想听到正确发音的示例时播放字词的记录

在这个应用中,声音对于主要功能是十分重要的。人们使用这个应用来听他们正学习的语言的词语与短语,因此即使当设备锁定或者被调至静音时也要能播放声音。因为用户需要清晰地听到声音,他们会期望其他他们可能播放的音频都被静音。

为了满足用户对于该应用所期望的音频体验,你应该使用播放(Playback )类目。虽然这一类目可以被定义为与其他音频混合,但该应用应该使用默认的行为以确保其他的音频不会干扰那些用户明确选择听到的教育性内容。 场景2:网络电话应用。你需要提供:  接收音频输入的能力  播放音频的能力

在该应用中,声音对于主要功能是十分重要的。人们经常会在使用另一个应用时使用该应用与他人进行交流。用户期望能在他们将设备调至静音或设备被锁定时接听电话,他们希望在来电期间其他音频被静音。他们也希望应用在后台运行时也能继续打电话。

43 / 58

iOS人机界面指南(三):iOS技术

为了满足用户对于该应用所期望的音频体验,你应该使用播放和录音(Play and Record)类目,并且你要确保只有在你需要时才会激活你的音频会话,以便用户可以在打电话过程中使用其他音频。

场景3:允许用户通过不同任务引导角色的游戏。你需要提供:  不同的游戏运行音效  配乐

在该应用中,声音会在很大程度上提升用户体验,但对于主任务并没有那么重要。而且,用户可能会希望能在玩游戏时静音或听他们乐单中的歌曲而不听游戏配乐。

最好的策略是在你的应用启动时确定用户是否在收听其他音频。不要要求用户选择他们是要收听其他音频或是你的音效。而应该使用音频会话功能中的AudioSessionGetProperty来询问kAudioSessionProperty_OtherAudioIsPlaying属性的状态。依据所询问的答案,你可以选择环境(Ambient)或是个人环境(Solo Ambient)类目(这两种类允许用户静音玩游戏):

 如果用户正在听其他音频,你应该假设他们想要继续听并且不想被强迫收听游戏音

效。在这种情境下,你最好选择环境(Ambient)类目。

 如果用户在你的应用启动时没有在收听其他音效,你最好选择个人环境(Solo

Ambient)类目。

情境4:一个为用户到达目的地提供准确、实时导航指示的应用。你需要提供:  每一步旅途的语音指示  一些反馈音效

 支持用户继续收听他们自己的音频的能力

在该应用中,无论应用是否是在后台运行,语音导航指示都表现为主要任务。基于这一原因,你最好使用播放(Playback)类目,它允许你的音频在设备被锁定、静音或是在后台运行时仍可以播放。

你可以通过添加kAudioSessionProperty_OverrideCategoryMixWithOthers属性来实现允许人们在使用你的应用时收听其他音频。但是你也想要确保用户在他们正在播放其他音频时

44 / 58

iOS人机界面指南(三):iOS技术

能听到语音提示。你可以为音频会话添加

kAudioSessionProperty_OtherMixableAudioShouldDuck属性来确保你的音频比其他音频的声音更大,除了iPhone上的电话以外。这些设置允许应用在后台运行时也可以恢复音频会话,可以确保用户能获得实时更新的导航。

情境5:一个允许用户上传文本和图片到网站上的博客应用。你需要提供:  简短的启动音效文件

 用以补充用户行为的各式各样的短音效(例如当邮件被上传后播放的音效)  发送失败播放的警示音

在该应用中,声音提升了用户体验,但也不是必需的。主任务与音频并没有关系,用户也不是必须要通过收听声音来成功使用应用。在这一情境中,你最好使用系统声音服务来产生声音。这是因为应用中所有声音的音频情境都应符合本技术的目的,这意味着要遵循用户意愿制造服从于设备锁定和铃声/静音(或静音)开关的界面音效和警示音。

3.13.3 管理音频中断(Manage Audio Interruptions)

有时候,当前播放的音频会被来自于不同应用的音频所打断。例如,在iPhone上,来电会持续中断当前应用的音频。在多任务情境中,这种音频中断的频率会很高。

为了提供用户喜欢的音频体验,iOS系统依赖于你来:

 

识别可能会引起应用中断的音频类型

当应用在音频中断结束后继续运行时进行合理地反馈

每个应用需要识别会引起音频中断的类型,但不是每个应用都需要决定如何在音频中断结束后进行反馈。这是因为多数类型的应用应在音频中断结束后恢复音频。只有那些主要或部分(即那些提供媒体播放控制的应用)的媒体播放应用,才必须才用额外的步骤来决定合适的反馈。

45 / 58

iOS人机界面指南(三):iOS技术

从概念上讲,基于中断音频与中断结束后用户所期望的特别的应用反馈,有两种类型的音频中断:

 可恢复性中断是(resumable interruption)被一些音频引起的,那些音频被用户视为他们主要听觉体验的的插曲。在可恢复性中断结束后,显示媒体播放控件的应用应该恢复它被中断前的任务,无论是在播放音频还是保持暂停。没有音频播放控件的应用则应该恢复播放音频。例如,试想用户在iPhone上使用应用播放音乐时,电话在歌曲的中间接入。用户接起了电话,期望在他们通话时播放的应用能静音。在通话结束后,用户希望播放的应用自动恢复播放歌曲,因为音乐而非电话才是他们的主要听觉体验,而他们在电话接入前也没有暂停音乐。另一方面,如果用户在电话接入前暂停了音乐播放,他们将希望电话结束后音乐仍保持暂停。其他能引起可恢复性中断的应用的例子包括那些具备闹钟、音频提示(例如语音方向指示)或其他间歇性音频功能的应用。

 不可恢复中断(nonresumable interruption)是由那些被用户视为首要听觉体验的音频所引起的,比如媒体播放用用的音频。在不可恢复中断结束后,显示媒体播放控件的应用不应该恢复播放那个音频。而没有媒体播放控件的应用应该恢复播放音频。例如,假设用户正在收听一个音乐播放应用(音乐应用1),此时另一个音乐播放应用(音乐应用2)打断了它。用户终止后决定收听音乐应用2一段时间。在退出音乐应用2之后,用户不想要音乐应用1自动恢复播放,因为此时他们主动将音乐应用2作为首要的听觉体验。

下列准则可以帮助你决定支持什么信息以及如何在音频中断之后继续:

确定你的应用引起的音频中断的类型。在你的音频结束时,你可以通过以下两种方式中的一种禁用你的音频会话来实现这一功能:

 

如果你的应用引起了一个可恢复性中断,使用

AVAudioSessionSetActiveFlags_NotifyOthersOnDeactivation标识禁用你的音频会话。 如果你的应用引起了一个不可恢复中断,不用任何标识就可以禁用你的音频会话。

倘若不这样,标识会在适宜的情况下允许iOS系统赋予被中断的应用自动恢复播放它们的音频的能力。

46 / 58

iOS人机界面指南(三):iOS技术

决定是否应该在一个音频中断结束后恢复音频。你应依据你应用中所提供的音频用户体验来做这一决断。

 如果你的应用呈现了用户用于播放或暂停音频的媒体播放控件,你需要在一个音频中断结束后检查AVAudioSessionInterruptionFlags_ShouldResume标识,如果你的应用接受应该恢复(Should Resume)标识,你的应用应该: · 如果你的应用被打断时在主动播放音频,恢复播放音频;

· 如果你的应用被打断时没有在主动播放音频,不需要恢复播放音频。

 如果你的应用没有呈现任何用户可用于播放或暂停音频的媒体播放控件,你的应用应该在音频中断结束后总是保持恢复之前播放的音频,无论是否呈现了“应该恢复”标识。例如,播放音效的游戏应该在中断后自动恢复播放音效。

3.13.4 适时的处理媒体远程控制事件(Handle Media Remote Control Events, if Appropriate)

当人们使用iOS媒体控制或辅助控制(如耳机线控)时,应用要能响应远程控制事件。这需要允许你的应用能接收来自于你的用户界面之外的输入,无论你的应用当前是在前台还是后台播放音频。

应用可以播放仍在进行时,通过后台向支持Airplay的硬件(如Apple TV)发送视频。这样的应用接收通过远程控制事件实现的用户输入行为,据此用户可以控制处于后台运行状态的应用中的视频播放。除此之外,这类的应用程序也能在音频会话被打断而转入后台时重新将其激活。

一个媒体播放应用,特别是它会在后台播放音频或视频时,尤其需要合理响应媒体远程控制事件。

当你的应用在后台运行时,为了满足与播放媒体相关的责任,要确保遵循以下这些原则:

你的应用接收远程控制事件的次数。例如,当你的应用可以帮助用户阅读内容、搜索信息或是收听音频时,它只有在用户处于音频场景中时才应该接收远程控制事件。当用户

47 / 58

iOS人机界面指南(三):iOS技术

脱离音频情境时,你应该放弃接收事件的能力。如果你的应用允许用户在支持AirPlay的设备上播放音视频,它应该在媒体播放期间都可以接收远程控制事件。遵循这些原则会允许用户在你的应用中处于非媒体情境中时,可以体验到不一样的应用媒体,并能用耳机控制它。

尽可能的使用系统原生的控件以提供AirPlay支持。当你使用MPMoviePlayerController类实现AirPlay播放功能时,你可以利用标准的控件以允许用户选择当前范围内支持AirPlay的硬件。或者你可以使用MPVolumeView类来显示用户可选择的支持AirPlay的音频或视频设备。用户习惯于这些标准控件的外观和行为,因此他们可以理解如何在你的应用中使用它们。

不要改变事件的用途,即使这个事件在你的应用中没有意义。用户期望iOS系统的所有应用媒体控制和辅助控制能有功能上的统一。你不必实现你的应用所不需要的那些事件,但你所实现的事件必须产生符合用户期望的结果。如果你重新定义一个事件的意义,你会使用户困惑并冒险把他们带入一个未知的状态,他们只能通过退出你的应用来逃离。

3.14 VoiceOver

VoiceOver增加了对盲人、弱视用户,以及一些有学习困难的用户的辅助性。

48 / 58

iOS人机界面指南(三):iOS技术

为了确保VocieOver的用户能使用你的应用,你可能需要确保你的用户界面内的页面和控制器能提供一些描述性信息。对VoiceOver的支持不需要你改变你用户界面内的任何视觉设计。

当你完全遵照标准的方式使用标准的用户界面元素时,几乎不(即使有也很少)需要增加额外的工作。你的用户界面越趋向定制化,你就越需要提供更多的信息来保证VoiceOver能准确的描述你的应用。

增加你的iOS应用对VoiceOver用户的可用性,可以扩大你的用户基础并帮助你进入新的市场。支持VoiceOver也可以帮助你遵守由主流群体所制定的辅助性指导准则。

3.15 路线选择(Routing)

地图可以显示到达用户目的地的可选路线:

49 / 58

iOS人机界面指南(三):iOS技术

当人们想要获得关于某条路线的更多交通信息时,地图也可以显示能提供路线选择的应用列表——既包括安装在设备上的应用也包括应用商店中的应用。

路线选择应用可以提供当前选择的路线有关的信息。人们希望路线选择应用能够快捷、易用,特别是保证准确性。依据本章提供的指导原则能帮你为用户提供他们可信任的交通信息和他们期望的用户体验。

重要:地图能依据人们选择的路线给他们提供驾车和步行的指示。路线选择应用可以提供交通信息,它着重于使用交通工具(如公交车、火车、地铁、渡船、自行车、行人、穿梭巴士等)的模型替代实物逐步地指示方向。

50 / 58

iOS人机界面指南(三):iOS技术

如果你的应用不能提供用户指定的路线的交通信息,那么不要将你的应用定位为路线选择应用。

实现你的应用承诺的功能。当人们在交通列表里看到你的应用时,他们认为它可以帮助其到达目的地。但是如果你的应用不能提供所选路线的信息——或者它没能涵盖它看似应该涵盖的那些种类的交通信息——人们就不会愿意给它第二次机会。准确的表达出你的应用的能力是十分重要的;否则,你的应用会看起来像是在故意误导用户。 在你的路线选择应用中,有两种主要的方式可以给用户信心:

尽可能准确的定义你所支持的地理区域。例如,如果你的应用能帮助人们获得巴黎的

公交线路的信息,那你所支持的地区应该是巴黎,不是法兰西岛,也不是法国。 明确你所支持的交通信息类型。例如,如果你专攻于地铁信息,不要暗示你仿佛支持所有的轨道交通类型

注意:虽然准确的报告你所支持的地区意味着将会减少你的应用在交通信息列表里的出现次数,但这么做却可以帮助用户更加信任它。

为易用性合理组织界面。易用性对于路线规划应用来说特别重要,因为用户常常会在极具挑战性的情况下使用它们——例如在明亮的阳光下、在昏暗的车厢内抑或是在颠簸的旅程中,或在非常紧急的情况下。要确保你的文字在任何光照条件下都能容易的阅读,确保按钮即使在并不平稳的旅程中也能易于准确点击。

专注于路线。虽然辅助信息会很有用,但你的应用应该专注于为用户提供逐步的指示以便他们能据此到达目的地。特别要强调的是,你要让用户知道他们处于哪一步,并知道如何到达下一步。你可以提供额外的数据——比如时间表或系统地图——但不要让这些数据比交通信息还重要。

为路线的每一步提供信息。永远不要让用户感觉被你的应用所遗弃。即使在可以准确的报道你所支持的地区时,你也不能假定用户已经抵达的路线中的第一个交通节点或是最后一个交通节点就是他们目的地点。为了控制这一情况,首先就是测量起点到终点距离。如果距离足够短,要提供从用户当前位置到第一个交通节点及从最后一个交通节点到用户目的地的步行方向指示。如果步行不是一个合理的选择,尝试描绘用户的其他选项。如果必要的话,你可以给用户提供打开地图,获取这部分路线的步行或驾车方向指示的方式。

51 / 58

iOS人机界面指南(三):iOS技术

当用户从地图应用切回你的应用时,不要要求他们重复输入信息。如果用户从地图应用切入(你的应用)时,你已经获知了他们中意的起点与终点,因此你可以在应用打开时直接呈现适合的交通信息。如果用户从主屏幕中开启你的应用,要为他们提供简洁的方式用以输入路线详情。

显示图文并茂的交通信息。地图页面可以帮助人们以更大的、实物性的视角查阅他们完整的线路;清晰的步骤可以帮助人们专注于他们抵达目的地所需采取的必要行动。最好可以同时支持这两个任务并能让用户便捷地进行切换。

注意:无论以什么格式,最重要的是显示与用户线路相关的相同的交通信息。例如,如果路线中包含五个步骤,在地图和路线列表页中必须描绘相同的五步。

当你的应用被从交通列表中选中时,需要以显示完整的线路做为良好的开始——包括在地图页面中显示始于或抵达交通节点的步行路线。地图页面可以为用户提供他们旅途的多步骤的总览,并能展示适于周遭地理环境的路线。

用附加信息丰富地图页面。人们期望你的应用中的地图可以表现的与他们使用过的其他地图相似。除了用户能放大和缩小以外,你还应该显示用户所需的那些注释信息。例如,你应该显示图钉用以代表用户当前的位置、目的地以及沿路的转乘点或重要的节点。 确保避免只显示一个单独的图钉,因为对用户来说,如果没有额外的背景,很难理解它代表什么。欲了解在你的应用中使用地图页面的更多信息,详见Map View.

尽可能的整合静态地图页面——例如在地图视图中加入地铁系统地图等。一个很好的实现方法就是在地图页面覆盖静态图片,以便用户可以看到他们的路线及他们的当前位置是如何与更大的交通系统相关的。

注意:如果你决定让应用显示一个静态的地图图片,要确保使用高分辨率的图片以保证用户在缩放时维持高质量的显示。

给用户提供不同的方案来挑选多样的交通选择。很多因素会影响人们交通的选择—例如不同的时间段,天气以及他们携带东西的多少—所以提供简洁地不同交通方式的对比是十分重要的。例如,你要能让用户可以依据开始或结束的时间、需要步行的数量、沿途停下的

52 / 58

iOS人机界面指南(三):iOS技术

次数抑或转乘的次数或所需的不同的交通类型等来挑选交通方式。不管你显示多种交通选择的顺序如何,确保用户能立即分辨出这些选项的不同之处。

考虑使用推送通知为人们提供与路线相关的重要信息。尽可能的让人们了解交通情况信息的变化,以便他们可以据此调节自己的计划。例如,如果火车晚点或者巴士路线临时停滞,人们可能会需要选择不同的交通路线到达目的地。而在一条不同步骤的站点之间相隔很长距离的交通路线中,人们会希望在他们的交通工具将要抵达行程中的下一部分时能获得通知。

3.16 编辑菜单(Edit Menu)

用户能呼出一个编辑菜单来完成诸如在文本视图、网页或图片视图中的剪切、粘贴以及选择操作。

你可以调整一些菜单的行为使用户能更多的控制(活处理)你App中的内容。举个例子,你可以:

列举出适合当前情境的标准菜单的命令

53 / 58

iOS人机界面指南(三):iOS技术

 

在菜单显示前判定菜单的位置,以便防止你App界面中重要的信息被遮盖 定义当用户双击时会显示默认被选择的对象的菜单

你不能改变菜单本身的颜色和形状。

关于如何在代码中实现这些行为的相关信息,参见Text Programming Guide for iOS中Copy, Cut, and Paste Operations章节。

为了确保编辑菜单在你的应用中的表现符合用户期望,你应该:

在当前情境下显示合理的命令。例如,当没有对象被选择的时候,菜单中不应该包括复制或剪切(命令),因为这些命令是针对选择(的内容)而操作的。相似地,如果有对象被选择的时候,菜单中不应该包括选择(命令)。如果你在自定义页面中支持编辑菜单,你就有责任确保菜单中显示的命令切合当前的情境。

依据你的页面布局调节菜单显示。iOS在插入点或选择的上方或下方依据可获得的空间来放置菜单指针以显示编辑菜单,这样用户就能看到菜单命令是如何与内容相关的。必要的话,你可以通过程序在菜单显示之前决定它的位置,这样可以避免用户界面中的重要信息被遮挡。

支持两种手势来调用菜单。虽然触控和长按手势是用户呼起编辑菜单的首选方式,但他们也可以在文本页面中通过双击一个单词来选择该单词并同时呼起菜单。如果你在自定义页面中支持菜单,确保它能支持两种手势。除此之外,你可以定义用户双击时默认的选择对象。

避免在你的用户界面中创建和编辑菜单中功能相同的按钮。例如,使用编辑菜单让用户进行复制操作远比提供一个复制按钮要好,因为用户将会想知道为什么在你的应用中会有两种方法做同样的事。

如果静态文本的选择对用户来说是有用的,那么可以考虑使用它。用户可能想要复制图片的标题,但他们不可能想复制选项卡的标签或是屏幕的标题,比如“账户(Account)”。在文本页面内,文字的选择应该是默认设置的。

54 / 58

iOS人机界面指南(三):iOS技术

不要使按钮标题可选择。如果按钮的标题是可选择的,用户很难在不激活按钮的情况下呼出编辑菜单。通常来说,像按钮这样操作的元素不需要是可选择的。

将对撤销与重做的支持与对复制与粘贴的支持组合到一起。人们经常希望在他们改变主意的时候能撤销最近的操作。由于编辑菜单在它操作执行的时候是不需要确认的,你应该给用户提供撤销或重做这些操作的机会。

如果你需要创建自定义的编辑菜单项,需要像下面展示的这个例子一样遵循这些指导原则:

创建直接作用于用户选择的包含编辑、修改或其他操作的编辑菜单。人们期望在当前的情境内用标准的编辑菜单项操作文本或对象,那么你的自定义菜单项最好能有相似的表现。

将自定义项列在所有系统提供的项的后面。不要将你的自定义项与系统提供的项混置在一起。

保持自定义菜单项的数量在合理的范围内。你不应该用太多选择淹没你的用户。

使用简洁的名称命名你的自定义菜单项并确保名称能准确的描述命令的作用。通常,项的名字应该是一个可以描述行为如何执行的动词。虽然你通常会使用单个的大写单词作为名字,但如果你必须使用一个短语(作为名字)时,就应使用标题式大写短语。(简洁的、标题性的大写词就是将除了文章、四字及四字以下的并列连词与介词之外的每个单词都要大写。)

3.17 撤销与重做(Undo and Redo)

用户通过摇晃设备触发撤销操作,会显示提醒框以允许他们:

55 / 58

iOS人机界面指南(三):iOS技术

  

撤销他们刚才输入的内容 重做先前撤销的输入 取消撤销操作

你可以在你的应用中通过以下说明用更为通用的方式来支持撤销操作:

  

用户可以撤销或重做的行为

在你的应用下晃动事件是作为晃动撤销手势的 支持多少级的撤销

欲了解如何用代码实现这一行为,参见Undo Architecture。如果在你的应用中支持撤销和重做,遵循以下准则以提供好的用户体验:

为用户提供简洁的描述性短语使其能准确的获知他们正在撤销或重做的内容。iOS系统自动提供了“撤销”和“重做”的字符串(包括词语后面的空格)作为撤销警示按钮的标题,但你需要提供一或两个词语用于辅助描述用户的重做或撤销操作。例如,你可能提供文本的

56 / 58

iOS人机界面指南(三):iOS技术

“命名”或“地址更改”之类的词语用以创建像“撤销命名”或“重新更改地址”这样的按钮标题。(要注意,在提醒框中,“取消”按钮是不能改变或移除的)。

避免提供太长的文本。太长的按钮标题容易被断章取义并且很难被用户解读。由于这个文本是存在于按钮的标题之内,要使用标题样式的大写形式并且不能添加标点。

避免过度使用摇晃手势。即使你能程式化的设定你的应用将摇晃事件作为摇动撤销操作,你也是在冒着混淆用户视听的风险,因为他们也可能使用摇晃执行一个不同的操作。分析你的应用中的人机交互以避免创建那些用户无法可靠地预测摇晃手势结果的场景。

如果撤销和重做在你的应用中是基础性任务,尽量使用系统原生的撤销与重做按钮。记住摇晃手势是用户触发撤销与重做操作的主要方式,而如果提供两种不同方式完成同样的任务则会使用户困惑。如果你认为很有必要提供直观专有的撤销与重做操作,你可以在导航栏中放置系统原生的按钮。(欲了解更多关于这些按钮的信息,参见Toolbar and Navigation Bar Buttons)。

将撤销与重做能力与用户当下的情境进行清晰地关联,而非过早地介入情境。仔细考虑你允许进行撤销与重做操作的情境。通常来说,用户期望他们的改变和操作可以立即被有效的执行。

57 / 58

iOS人机界面指南(三):iOS技术

3.18 键盘和输入页面(Keyboards and Input Views)

在iOS8与之后的系统中,你可以创建自定义键盘的扩展来替代系统原生键盘。欲了解更多关于管理应用内扩展(包括键盘)的信息,参见应用扩展章节;欲了解如何开发自定义键盘扩展的信息,参见App Extension Programming Guide中的Custom Keyboard章节。

在合适的情况下,你也可以在你的应用内设计自定义的输入页面来替代系统原生的屏幕键盘。例如,Numbers(译者注:iWork中的电子表单应用程序)中提供了多种输入页面,这些页面的设计用以简单高效地完成数量、日期和其他值的输入。

如果你提供自定义输入页面,确保它的功能对于来用户来说是清晰易懂的。

你也可以提供自定义的输入辅助视图,这种视图通常表现为显示在键盘(或你的自定义输入页面)上方的一个元素。例如,在某些情境中,Numbers会显示一个输入辅助视图用以帮助用户执行针对电子表格中的值的标准或自定义计算。

当用户在你的输入页面中敲击自定义控件时,使用标准的键盘敲击声提供声音反馈。欲了解在代码中如何使用这一声音,参见UIDevice Class Reference文件中的playInputClick章节 注意:标准的敲击音效只适用于当前屏幕上的自定义输入页面。人们可以在设置-声音中关闭所有的键盘音效——包括你的自定义输入页面中的那些。

58 / 58

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- huatuo0.cn 版权所有 湘ICP备2023017654号-2

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务