作为UI设计师,最重要的就是接触iOS的设计规范。苹果拥有引领世界的设计能力,iOS影响着一代又一代的设计师,所以这篇文章主要是来翻译和解析一下iOS的设计规范。这个规范算是所有移动设计师必看的内容了。

本文为翻译内容,来自苹果官方人机界面准则
推荐访问英文原文地址:人机界面准则
翻译: 张洪Heo(转载注明出处)
非原创内容须知

该文章为系列内容:查看系列全部文章

交互

3DTouch

在支持的设备上,人们可以通过对触摸屏施加不同程度的压力来访问附加功能。应用程序可以通过显示上下文菜单(或支持窥视和弹出)进行响应,以显示项目以及人们可以用来影响项目的操作。

在运行iOS 13和更高版本的设备上,无论设备是否支持3D Touch,用户都可以使用触摸按住手势打开上下文菜单。在3D Touch设备上,手势可以更快地显示上下文菜单。

主屏互动

在运行iOS 13或更高版本的设备的主屏幕上,当人们触摸并按住应用程序图标时,应用程序可以显示上下文菜单(在3D Touch设备上,人们只需简单地按一下图标就可以看到菜单)。应用程序的上下文菜单可以让人们快速执行常见的应用程序特定任务,并查看有趣的信息。例如,日历除了显示日程表上的下一个事件外,还提供了创建事件的快捷方式。有关设计指南,请参阅主屏幕操作小工具

实况照片(Live Photo)

当人们与照片互动时,照片就变得栩栩如生,用动作和声音展示照片拍摄前后的瞬间。在运行iOS 13或更高版本的设备上,人们通过将手指放在照片上来激活Live Photo;在3D Touch设备上,人们只需简单地按下Live Photo。有关设计指南,请参阅实况照片

Apple Pencil和涂鸦。

Apple Pencil是一款适用于iPad应用程序的多功能、直观的工具,可以在记录笔记、素描、绘画、标记文档等时提供像素级的精确度。在iPadOS 14和更高版本中,Scribble允许人们使用Apple Pencil,通过快速的、私人的、设备上的手写识别,在任何文本字段中输入文本。有关指导,请参阅支持Scribble。

支持预期行为。Apple Pencil的设计目的是让绘画、手写和标记变得轻松自然,它也可以作为指针或用户界面交互工具。除了支持人们期望的Apple Pensey行为之外,还可以考虑支持意想不到的交互。例如,你的应用程序可以让人们在文档的页边空白处做笔记。

让人们选择何时在Apple Pencil和手指输入之间切换,而不是强迫他们。例如,人们不应该需要从Apple Pencil切换到手指来与控件交互。如果你的应用程序支持Apple Pencil打标,你的应用程序的控制也应该响应Apple Pencil。无响应的控制会导致混乱,并可能给人故障或电池电量不足的印象。同样,让人们也用手指来画画和做记号。(Scribble仅支持Apple铅笔输入。)。

让人们在Apple Pencil触摸屏幕的那一刻留下印记。把Apple Pencil放到屏幕上的体验应该和把一支经典铅笔放在纸上的体验一样。在使用Apple Pencil之前,不需要用户点击按钮或进入特殊模式。

帮助人们通过回应他们使用Apple Pencil的方式来表达自己。Apple Pencil可以感知倾斜(高度)、力(压力)和方位(方位)。你的应用程序应该利用这些信息来影响Apple Pencil的笔划,比如改变笔触的粗细和强度。在应对压力时,要保持简单和直观。例如,通过改变压力来影响连续属性(如油墨不透明度或画笔大小)感觉很自然。

倾斜度、压力、方位角

使用视觉反馈来指示与内容的直接联系。Apple Pencil应该看起来可以直接、立即地操作它在屏幕上触摸的内容。它不应该发起看似互不相关的动作,也不应该影响屏幕其他部分的内容。

设计一个完美的左撇子和右撇子体验。避免将控件放置在可能被任一只手遮挡的位置。如果控制有可能变得模糊,考虑让人们重新定位它们。

只要有可能,请尊重用户对双击手势的设置。Apple Pencil2通过直接(通过更改工具)或间接(通过显示颜色选项)改变绘图方式来响应双击手势。虽然双击在默认情况下会在当前工具和橡皮擦之间切换,但用户可以转到设置并指定双击应该在当前工具和上一个工具之间切换、显示和隐藏颜色选择器,或者什么都不做。如果你的应用程序支持这些行为,请尊重系统范围的双击设置,不要指望人们会因为同样的行为而学习新的手势。如果系统范围的双击设置在你的应用程序中没有意义,你仍然可以使用这个手势来更改Apple Pensey 2的模式。例如,带有网格编辑工具的3D应用程序的用户可以使用双击在该工具的提升和降低模式之间切换。

如有必要,为用户提供启用自定义双击行为的方法。如果你的应用程序支持Apple Pencil2的部分或全部双击行为,但你也支持自定义的双击行为,那就提供一个控件,让人们可以启用自定义行为。如果用户没有明确的方式启用自定义行为,那么当你的应用程序不响应系统范围的双击设置时,他们可能会感到困惑。在这种情况下,确保人们可以很容易地发现你的应用程序支持的替代行为,但不要默认启用它们。

切勿使用双击手势执行修改内容的操作。人们可能会不小心双击,这意味着他们甚至可能没有意识到你的应用程序已经执行了该操作。当双击在工具模式之间切换时,用户只需再次双击就可以很容易地撤销意外的模式更改。然而,在使用手势来执行操作的应用程序中,人们必须中断他们的工作流程才能找到撤销该操作的方法。更糟糕的是,一款应用程序使用双击来执行潜在的破坏性操作:如果用户没有意识到操作已经发生,他们可能会丢失数据。

有关开发人员指南,请参阅Apple Pencil交互

支持Scribble

使用Scribble和Apple Pencil,人们可以简单地在你的应用程序中接受文本的任何地方书写–他们不必首先点击或切换模式。因为Scribble完全集成到iPadOS 14和更高版本中,所以默认情况下,所有应用程序都可以使用它,就像键盘一样。以下指导原则可以帮助你增强默认的Scribble支持,并在你的应用程序中提供出色的编写体验。

始终让输入文本感觉流畅和轻松。默认情况下,Scribble适用于除密码域之外的所有标准文本控件,例如文本域、文本视图、搜索域和Web内容中的可编辑域。如果你在应用程序中使用自定义文本域,请不要让用户在开始书写之前点击或选择该文本域。

让Scribble在人们想要输入文本的任何地方都可用。与使用键盘不同,使用Apple Pencil鼓励人们像对待一张纸一样对待屏幕。让Scribble在文本输入看起来自然的地方持续可用,有助于在你的应用程序中强化这种认知。例如,在提醒中,人们很自然地会在最后一项下方的空白处创建一个新的提醒,即使该区域不包含文本字段。有关开发人员指南,请参阅UIIndirectScribbleInteraction。

不要在人们写作时分散他们的注意力。某些文本域行为可以很好地用于键盘输入,但可能会扰乱Apple铅笔支持的自然书写体验。例如,最好避免在人们在文本字段中书写时显示自动补全文本,因为建议可能会在视觉上干扰他们的写作。在人们开始书写时隐藏字段的占位符文本也是一个好主意,这样他们的输入就不会与其重叠。

当人们在文本域中书写时,请确保文本域保持静止,并且其内容不会滚动。在某些情况下,在文本字段成为焦点时移动文本字段是有意义的:例如,搜索字段可能会移动以腾出更多空间来显示结果。当人们使用键盘时,这样的动作很好,但当他们写字时,可能会让他们感觉自己已经失去了对输入内容去向的控制。如果无法阻止文本字段移动,可以考虑推迟移动,直到人们暂停他们的写作(有关开发人员指南,请参阅ScribbleInteractionShouldDelayFocus(_:))。

当人们在文本域中书写和编辑时,防止自动滚动也很重要。当抄写文本自动滚动时,人们可能会尽量避免在上面写字。更糟糕的是,如果人们在使用Apple Pencil选择文本时滚动文本,他们可能会选择与他们想要的文本范围不同的文本。

给人们足够的写作空间。当人们使用键盘输入文本时,一个小的文本域是可以接受的,但是在里面输入可能会让人感到不舒服。当你知道Apple Pencil可能会输入时,在人们开始输入之前或暂停书写时,通过增加文本栏的大小来改善你的应用程序的书写体验。请务必避免在人们书写时调整文本字段的大小。

有关开发人员指南,请参见UIScribbleInteraction。

提供自定义绘图体验

使用PencilKit,你可以让人们做笔记,为文档和图片添加注释,并以iOS提供的低延迟体验进行绘图。PencilKit还可以轻松地在应用程序中创建自定义画布,并提供最先进的工具选取器和墨水调色板。有关开发人员指南,请参阅PencilKit。

帮助人们在现有内容的基础上进行绘制。默认情况下,PencilKit画布上的颜色会动态调整为深色模式,因此人们可以在任一模式下创建内容,在这两种模式下效果都会很好。但是,当人们在现有内容(如PDF或照片)上绘制时,你可能希望阻止颜色的动态调整,以使标记保持清晰和可见。

确保应用程序在紧凑的环境中运行时,工具选取器不会模糊内容。在常规环境中,工具选取器会漂浮在内容上方,这样人们就可以将其移开,但在紧凑的环境中,工具选取器会固定在屏幕的底部边缘。为了避免遮挡用户的内容,你可以调整内容视图的框架或滚动视图插页,以考虑到工具选取器的高度。

考虑提供自定义的撤消和重做按钮,以便在应用程序在紧凑的环境中运行时显示。在常规环境中,工具选取器包括撤消和重做按钮,但在紧凑型环境中没有。在紧凑型环境中,你可以在导航栏中显示自定义按钮。你也可以考虑支持标准的3指撤消/重做手势,这样人们就可以在任何环境下使用它。有关指导,请参见撤消和重做。

常规环境

紧凑环境

音频

人们通过音量按键、静音开关、耳机控制和屏幕上的音量滑块来控制音量。许多第三方配件也包括音响控制。音频可以通过内置或外置扬声器、耳机输出,甚至可以通过支持AirPlay或蓝牙的设备无线输出。无论声音是应用程序体验的主要方面还是点缀,你都需要知道人们对声音的期望是什么,并满足这些期望。

静音

人们将他们的设备切换到静音,以避免被意外的声音打断,如铃声和传入的信息声音。他们还希望禁用不必要的声音,包括键盘声音、音效、游戏配乐和其他声音反馈。当设备设置为静音时,应该只会出现明确启动的声音,例如媒体播放期间的音频、警报和音频/视频消息。

音量

无论是使用物理设备按钮还是屏幕上的滑块,人们都希望音量的变化会影响整个系统的所有声音,包括音乐和应用内的音效。唯一的例外是铃声音量,当音频播放不活跃时,铃声音量总是单独调节。

耳机

人们用耳机私下听声音,解放双手。当插入耳机时,用户希望声音能够自动播放,不会中断。拔下耳机后,他们希望播放立即暂停。

设计出色的音频体验

必要时自动调整音量,但不调整总音量。你的应用程序可以调整相对独立的音量级别,以实现出色的音频混合效果。但是,最终输出应始终由系统音量控制。

在适当的时候允许重新连接音频。人们通常希望选择不同的音频输出设备。例如,他们可能想通过客厅的立体声音响、汽车收音机或Apple TV收听音乐。支持此功能,除非有令人信服的理由不支持。

使用系统提供的音量视图可以进行音频调整。提供调整音频的界面控件的最佳方式是使用音量视图。该视图是可定制的,包括音量级滑块,甚至还包括重新路由音频输出的控件。有关开发人员指南,请参阅MPVolumeView

使用系统的声音服务处理短声音和振动。有关开发人员指南,请参见系统声音服务

如果声音对你的应用程序至关重要,请对你的音频进行分类。不同的音频类别允许通过静音开关将声音静音,与其他音频混合,或者在应用程序处于后台时播放。根据其含义和设备的当前音频状态选择类别,并将其分配给你的音频会话。例如,如果你不需要,不要让人们停止听另一款应用程序的音乐。一般来说,最好避免在应用程序运行时更改类别,但在不同时间录制和回放音频的应用程序除外。有关开发人员指南,请参阅音频会话编程指南

类别
含义 行为
独奏环境 声音不是必不可少的,但它会使其他音频静音。例如,有配乐的游戏。 响应静音开关。 不与其他声音混合。 在后台不播放。
周围 声音不是必不可少的,它不会使其他音频静音。例如,一个让人们在玩游戏时播放其他应用程序中的音乐来代替游戏原声的游戏。 响应静音开关。 与其他声音混合。 在后台不播放。
回放 声音是必不可少的,并且可能与其他音频混合。例如,教外语的有声读物或教育应用,人们在离开应用后可能想听。 不响应静音开关。 可能会或可能不会与其他声音混合。 可以在后台播放。
记录 声音被记录下来。例如,提供音频录制模式的笔记应用程序。如果此类应用允许人们播放已记录的笔记,则可能会将其类别切换为播放。 不响应静音开关。 不与其他声音混合。 可以在后台录制。
播放并录制 可能会同时录制和播放声音。例如,音频消息传递或视频通话应用程序。 不响应静音开关。 可能会或可能不会与其他声音混合。 可以在后台录制和播放。

在耳机断开后,在适当的时候恢复音频播放。有时,当前播放的音频会被来自不同应用程序的音频中断。临时中断(例如来电)被认为是可以恢复的。永久性中断,例如由Siri发起的音乐播放列表,被认为是不可恢复的。当可恢复中断发生时,如果中断开始时音频正在播放,则应用程序应该在中断结束时恢复播放。例如,播放配乐的游戏和播放音频过程中的媒体应用都应该恢复。

当你的应用程序播放完临时音频时,通知其他应用程序。如果你的应用程序可能会暂时中断其他应用程序的音频,它应该适当地标记音频会话,以便其他应用程序在安全恢复时得到通知。有关开发人员指南,请参阅AVFoundation中的AVAudioSessionSetActiveOptionNotifyOthersOnDeactivation常量。

只有在有意义的时候才对音频控制作出响应。无论你的应用程序是在前台还是后台,人们都可以通过控制中心或耳机上的控件,从你的应用程序界面之外控制音频播放。如果你的应用程序正在播放音频,处于清晰的音频相关上下文中,或者连接到支持AirPlay的设备,则可以响应音频控制。否则,你的应用程序不应该停止另一个应用程序在激活控件时可能正在播放的音频。

不要改变音频控件的用途。人们希望音频控件在所有应用程序中都能保持一致。永远不要重新定义音频控件的含义。如果你的应用程序不支持某些控件,那么它就不应该响应它们。

认证

要求用户仅通过身份验证来获取价值,例如个性化体验、访问其他功能、购买内容或同步数据。如果你的应用程序需要身份验证,请使用Sign in with Apple为用户提供一种简单而安全的登录方式。当你支持用苹果登录时,人们可以获得他们可以信赖的一致的登录体验,而且无需记住多个账户和密码的便利性。

如果你不使用Apple登录,请使用密码自动填充。此功能会自动生成并填写密码和安全代码,因此人们可以在身份验证屏幕上花费更少的时间。所有应用程序都应支持此功能。有关开发人员指南,请参见支持密码自动填充

尽可能延迟登录。当人们在做任何有用的事情之前被迫登录时,他们通常会放弃应用程序。在做出承诺之前,给他们一个爱上你的应用的机会。在购物应用程序中,人们可以在发布后立即浏览你的商品,只有在他们准备购买时才需要登录。在流媒体应用中,在登录播放内容之前,让人们浏览你的内容,看看你能提供什么。

解释身份验证的好处以及如何注册你的服务。如果你的应用程序需要身份验证,请在登录屏幕上显示简短、友好的说明,说明要求身份验证的原因及其好处。此外,请记住,并不是每个使用你的应用程序的人都从一开始就拥有账户。确保你解释了如何获得一个,或者提供了一个简单的应用内注册方式。

通过显示适当的键盘最大限度地减少数据输入。例如,当询问电子邮件地址时,显示电子邮件键盘屏幕,其中包含有用的数据输入快捷键。有关相关指南,请参阅键盘。有关可用键盘类型的完整列表,请参见UITextInputTraitsUIKeyboardType常量。

切勿使用术语密码。密码用于解锁用户的iOS设备,并在禁用生物识别身份验证时使用Apple Pay进行身份验证。

有关Apple Pay身份验证设计指南,请参阅Apple Pay

面部ID和触摸ID

只要有可能,请支持生物识别身份验证。Face ID和Touch ID是人们信任的安全、熟悉的身份验证方法。如果用户启用了生物识别身份验证,你可以假定他们了解它的工作原理,欣赏它的便利性,并且更愿意尽可能地使用它。请记住,人们可能会选择在他们的设备上禁用生物识别身份验证,因此你的应用程序应该准备好处理这种情况。

Face ID
Touch ID

为人们提供单一的身份验证方式。当人们不必选择如何进行身份验证时,这是最直观的。只给他们一个选项,比如Face ID。提供其他选项,比如要求用户名和密码,作为备用方案,只有在最初的方法失败的情况下才会这样做。

仅在响应用户操作时启动身份验证。明确的操作(如轻触按钮)可确保用户想要进行身份验证。在面部ID的情况下,它还增加了用户面对相机的可能性。

始终标识身份验证方法。例如,使用Face ID登录应用程序的按钮应该标题为“Sign in with Face ID”,而不是“Sign in”。

准确引用身份验证方法。请勿在支持Face ID的设备上引用Touch ID。相反,请勿在支持Touch ID的设备上引用Face ID。请检查设备的功能并使用适当的术语。有关开发人员指南,请参阅LABiometryType

通常,避免在你的应用程序中提供选择使用生物识别身份验证的设置。如果在系统级别启用了生物识别身份验证,只需假设用户想要使用它。如果你实现了特定于应用程序的设置,用户可能会进入这样一种状态:在你的应用程序中似乎启用了生物识别身份验证,而实际上它在系统范围内处于禁用状态。

不要使用图标来标识系统身份验证功能。当人们看到看起来像系统的Touch ID(指纹)和Face ID图标的图标时,他们认为他们应该进行身份验证。使用图标来标识身份验证功能会造成不一致和混乱,特别是当图标被着色、以大尺寸显示和脱离上下文呈现时更是如此。

有关开发人员指南,请参见本地身份验证

数据输入

无论是轻敲界面元素还是使用键盘,输入信息都可能是一个乏味的过程。当一款应用程序在做任何有用的事情之前要求大量输入来减缓这一过程时,人们可能很快就会灰心丧气,甚至可能完全放弃这款应用程序。

在可能的情况下,让用户尽可能选择而不是输入。使数据录入尽可能高效。例如,考虑使用选取器或表而不是文本字段,因为从预定义选项列表中进行选择比键入响应更容易。

尽可能从系统获取信息。不要强迫人们提供可以自动收集或在用户许可下收集的信息,例如联系人或日历信息。

提供合理的默认值。在可能的范围内,使用最可能的值预填充域。提供良好的默认值可以最大限度地减少决策并加快过程。

仅在收集了所需的值之后才启用下一步。在启用“下一步”或“继续”按钮之前,请确保所有必填字段都有值。使用启用按钮作为视觉提示,表明是时候继续操作了。

动态验证字段值。填完一张很长的表格后,你必须回去改正错误,这是令人沮丧的。只要有可能,请在输入后立即检查字段值,以便用户可以立即更正它们。

仅在必要时才需要字段值。仅对确实需要继续操作的信息使用必填字段。

轻松浏览值列表。特别是在表和选取器中,选择一个值应该很容易。考虑按字母顺序或以另一种便于快速扫描和选择的逻辑方式对值列表进行排序。

在文本字段中显示提示以帮助传达目的。当文本字段中没有其他文本时,该文本字段可以包含占位符文本,如“电子邮件”或“密码”。当占位符文本足够时,不要使用单独的标签来描述文本字段。

拖拽

拖动

用户只需用一根手指就可以移动或复制选定的照片、文本或其他内容,方法是将内容从一个位置拖到另一个位置,然后抬起手指将其放下。

触摸和握住选定的内容会使其看起来像是上浮并粘在用户的手指上。
当内容被拖动时,动画和视觉提示会识别可能的目的地。
系统还会显示一个徽章,指示何时不可能放置内容,或者将导致复制内容而不是移动内容。
有关开发人员指南,请参见UIKit中的拖放

来源和终点

拖放涉及将所选内容从源位置移动到目标位置。
这些位置可以位于同一容器(如文本视图)中,也可以位于不同的容器(如拆分视图两侧的文本视图)中。
例如,在Notes中,用户可以将选定文本拖动到同一便笺中的新位置。
在提醒中,用户可以将单个提醒从一个列表拖放到另一个列表中。

在iPad上,源位置和目的地位置也可以存在于不同的应用程序中,从而实现跨应用程序交互,比如将照片从Safari的网页拖到Mail的新邮件中。
在拖动内容的同时,用户可以通过多任务处理、退出主屏幕或从屏幕底部向上滑动以显示Dock来访问另一个应用程序。


在应用程序之间拖放内容总是会导致内容的复制,而不是移动。

支持拖放

拖放是一种高效、直观的功能,用户希望在整个系统中普遍实现该功能。
如果你的应用程序包含或生成人们可能想要移动、复制或插入的文本、照片、视频、音频或其他内容,则你的应用程序应支持拖放。

使拖放对所有可选和可编辑内容可用。
可选内容应该是可拖动的,并且可编辑内容应该接受拖放的内容。
还要确保你的应用程序支持在这些区域进行复制和粘贴。

如果适用,允许将内容拖放到控件上。
通常,将启用数据输入或选择的控件(如文本字段)配置为接受拖放的内容。

尽可能使用标准文本视图和文本字段。
这些系统提供的元素包括对拖放的内置支持。
有关相关指南,请参阅文本字段文本视图
有关开发人员指南,请参阅UITextFieldUITextView

为了提高效率,请考虑支持多项目拖放。在许多应用程序中,用户可以用一根手指拖动单个项目,并在拖动的同时,通过用另一根手指轻触其他项目来选择这些项目。选定的项目一起移动,并堆叠在拖动原始项目的手指下方。然后,用户将这些项目作为一组进行拖动,并将它们放在所需的目的地上。例如,主屏幕允许一次选择多个应用程序图标并将其拖放到一个文件夹中。一些应用程序,如Photos,提供了一种选择模式,允许在拖动之前选择多个项目。

确定在应用程序中拖放内容应导致移动还是复制。通常,当源容器和目标容器相同(在文档中拖动文本)时,移动是有意义的,而当它们不同(在文档之间或应用程序之间拖动)时,副本是有意义的。然而,情况并不总是如此。最重要的是,拖放操作应该是直观的。在提醒中,在列表之间拖动提醒会移动它们,而不是复制它们,因为这是人们所期望的。在应用程序之间拖放内容总是会产生副本。

只要有可能,就让人们撤销拖放。通常,当用户无意中将内容放到错误的目标位置时,他们应该能够使用Undo将你的应用程序恢复到以前的状态。也就是说,拖放的内容应该被删除,如果它是从应用程序中的其他位置移动的,则恢复到其原始位置。

考虑启用弹性加载。使用弹性加载,用户可以激活某些控件,如按钮和分段控件,方法是将选定的内容拖到这些控件上并短暂暂停,而不会丢弃这些内容。例如,在Mail中,可以将所选邮件拖到导航栏的后退按钮上,以到达邮箱层次结构中的其他位置。切勿将弹性加载作为激活控件的唯一方式。把它当作一种可以被发现的点缀。在大多数情况下,弹性加载的控件也应该响应轻击手势。有关开发人员指南,请参见UISpringLoadedInteraction。

提供拖动的内容

如有必要,定制拖动项目预览。通常,在用户手指下显示的预览应该是正在拖动的内容的半透明表示。此外观提供上下文,指示拖动正在进行,并使用户能够看到拖动内容下面的目的地。

只要有可能,提供拖拽数据的多种表示形式,从最高保真度到最低保真度排序。例如,在提供艺术线条时,你的应用程序可以按顺序提供PDF矢量表示、带透明度的无损PNG图像和无透明度的有损JPEG图像。这样,目的地可以选择它可以导入的最高质量的表示。

如果适用,将自定义对象的本机版本显示为最丰富的数据形式。例如,允许用户拖动图表的应用程序应该首先显示本机图表对象。然后,它应该为不支持图表对象的应用程序提供替代方案,比如图表的图像版本。

当传输应用程序的内容非常耗时或耗费资源时,实现文件提供程序扩展。文件提供程序扩展管理传输过程并确保其完成,即使你的应用程序不再运行。请注意,传输过程直到用户删除内容后才开始。有关开发人员指南,请参阅NSFileProviderExtension。

当你的应用程序的内容需要时间传输时,请提供进度信息。如果必须下载内容或复制大型文件需要时间,请提供进度信息。至少要提供内容的总大小,以便目的地可以计算剩余时间并显示适当的进度指示器。有关开发人员指南,请参阅NSProgress。

接受丢弃的内容

使用视觉提示识别潜在目的地并预览拖放内容的效果。突出显示、插入点指示器和动画都是识别可能目的地的好方法。当内容被拖动到视图上时,视图可能会微妙地闪烁并改变颜色,或者段落可能会分开,以便为拖动的图像腾出空间。当屏幕上有多个可能的目的地时,一次识别一个。如果源容器和目标容器相同,则可能不需要突出显示,除非将内容完全拖出源,然后重新进入。当内容被放置或不再位于目标上方时,请确保取消突出显示。

在适当的时候自动滚动目的地的内容。当内容被拖动到目的地边界之外时,你的应用程序可能需要确定是滚动目的地的内容,还是允许用户继续拖动到完全不同的目的地。如果你的应用程序允许用户继续拖动,请考虑定义一个区域,当被拖动的项位于其上方时,该区域会导致自动滚动。例如,当内容拖动到正文区域的顶部或底部时,Mail中的较长草稿邮件会自动滚动。标准文本视图和文本字段会自动采用此行为。

提取并显示拖放内容的尽可能丰富的表示形式。例如,可能会为你的应用程序提供几种图表表示形式。如果你的应用程序支持图表,它可以提取并显示本机图表对象。如果你的应用程序不支持图表,它可以提取并显示图表的图像版本。

如果适用,请仅提取已删除内容的相关部分。例如,如果用户将联系人从“联系人”拖到“邮件”中的“收件人”字段,则只使用姓名和电子邮件地址,而不使用联系人的地址信息。

删除内容后在表视图和集合视图中显示占位符。占位符临时指示内容完成传输后的驻留位置。

当删除的内容需要时间传输时显示进度。默认情况下,当应用之间发生耗时的传输时,系统会显示应用模式警报。考虑自定义进度的显示方式-例如,在表视图或集合视图中的占位符上显示进度指示器-这样就不会阻止用户使用你的应用程序。请注意,传输过程直到用户删除内容后才开始。

当拖放的内容启动流程时提供反馈。如果用户将内容拖放到启动任务的控件上(例如,将视频上载到共享网站),则会显示任务已经开始,并随时通知用户其进度。

删除失败时通知用户。如果无法插入拖放的内容(可能是因为文件传输中断),请通知用户拖放失败。

对删除的文本应用适当的样式。当源和目标支持相同的样式文本属性时,删除的文本应保持其原始字体、字样、大小和其他属性。否则,丢弃的文本应采用目的地的样式。

当用户不能立即撤销拖放时,考虑提供一种微妙、直观的方式来选择退出。例如,一个分享应用程序可能会在发布被删除的内容之前显示一个中间的共享表。此共享工作表可以提供提供其他内容(如状态消息)的方式,同时还提供取消按钮。照片在将照片拖入共享照片流中时会显示此行为。

反馈

不引人注目地将状态和其他类型的反馈集成到你的界面中。理想情况下,用户可以在不采取行动或不被打断的情况下获取重要信息。例如,在邮件邮箱中导航时,邮件会巧妙地在工具栏中显示状态信息。这些信息不会与屏幕上的主要内容竞争,但可以随时快速查看。

避免不必要的警报。警报是一种强大的反馈机制,但应仅用于传递重要信息–而且最好是可操作的信息。如果人们看到太多不包含基本信息的警报,他们很快就会学会忽略未来的警报。有关其他指导,请参阅警报

反馈帮助人们了解应用程序在做什么,发现他们下一步可以做什么,并了解操作的结果

文件处理

人们在创建、查看和操作文件时不应该考虑文件系统。如果你的应用程序可以处理文件,请尽可能淡化文件处理。

向人们灌输这样的信心:除非取消或删除,否则工作总是会被保留。一般来说,不要让用户显式保存文件。相反,在打开和关闭文件以及切换到其他应用程序时,应定期自动保存更改。在某些情况下,例如在编辑现有文件时,为了确认何时实际捕获编辑,保存和取消选项可能仍然有意义。

不提供创建仅本地文件的选项。用户通常希望他们的所有文件都可以在他们的所有设备上使用。只要有可能,你的应用程序应该通过iCloud等服务支持基于云的文件存储。

实现直观、图形化的文件浏览界面。理想情况下,使用系统熟悉的文档选取器进行浏览。如果你实现了自定义文件浏览器,请确保它是直观和高效的。文件浏览器在高度图形化、提供文件的可视化表示时工作得最好。为了更快地导航,请考虑提供一个新文档按钮,这样用户就不需要去其他地方创建新文档了。

允许用户在不退出应用程序的情况下预览文件。你可以使用Quick Look让用户查看Keynote、数字和页面文档、PDF、图像和某些其他类型文件的内容,即使你的应用程序实际上并未打开它们。请参见快速查看

考虑与其他应用程序共享文件。如果有意义,你的应用程序可以通过文件提供商扩展与其他应用程序共享文件。你的应用程序还可以让人们浏览和打开其他应用程序中的文件。有关开发人员指南,请参阅向应用程序添加文档浏览器

游戏控制器

游戏控制器可以增强游戏性,增加人们在游戏中的沉浸感。支持尽可能多的游戏控制器为人们提供了更多享受与游戏或应用程序交互的方式。

确定游戏控制器要求。如果你的游戏具有遥控器无法支持的高级游戏机制,你可以要求使用游戏控制器。App Store会展示一个“需要游戏控制器”的徽章,以帮助人们识别这类应用程序,如果人们没有为他们的iOS设备配对兼容的游戏控制器,它可能会发出警告。

启动时确认所需的游戏控制器连接。即使没有连接的控制器,用户也可以随时打开你的游戏。如果你的应用程序需要一个游戏控制器,在启动时检查它是否存在,并在必要时优雅地提示人们连接一个。

帮助人们了解在你的应用程序中使用游戏控制器的优势。如果你的应用同时支持遥控器和游戏控制器,向人们展示他们可以用游戏控制器做什么,而他们不能用遥控器做什么。

测试所有支持的输入设备。确保菜单和基本导航与你的应用程序支持的任何输入设备一起工作,这样人们在使用你的应用程序时就不需要不停地切换设备了。

有关开发人员指南,请参阅游戏控制器

按钮

游戏控制器倾向于提供以各种符合人体工程学的方式排列的相似的按钮组。这里有一个例子。

支持可点击的摇杆(如果存在)。一些控制器包括用户可以单击或按住以及旋转的摇杆。这些按钮-也被称为L3和R3-通常让人们修改通过旋转摇杆启用的操作。例如,单击或按住启用运动的左侧摇杆可能会让人们以不同的速度移动;单击或按住控制相机方向的右侧摇杆可能会让人们放大或“蹲下”。在考虑支持可点击摇杆的方法时,请遵循人们在各种游戏类型中预期的行为。

通常,你更喜欢使用左手摇杆或D键盘按钮来移动当前屏幕中的焦点。通常,人们在玩游戏时不会期望使用正确的摇杆来执行焦点导航。

通常,避免使用触发器或肩键来执行UI导航。除非你的游戏具有需要加速导航的深度嵌套用户界面,否则通常最好让用户使用A和B按钮进行导航。

自定义屏幕说明以匹配连接的游戏控制器。不同的控制器可以使用不同的颜色或符号来表示相似的按钮。例如,在Xbox控制器上,B按钮是红色的;在MFI控制器上,相同的按钮是绿色的。为避免混淆,请参阅使用连接控制器标签方案的按钮。

手势

人们通过在触摸屏上做手势来与iOS设备互动。这些手势引发了与内容的密切个人联系,并增强了对屏幕上对象的直接操纵感。

一般来说,使用标准的手势。人们熟悉标准的手势,不喜欢被迫学习不同的方式来做同样的事情。在游戏和其他身临其境的应用程序中,自定义手势可以成为体验的一部分。在其他应用程序中,最好使用标准手势,这样就不需要付出额外的努力来发现或记住它们。

避免使用标准手势执行非标准动作。除非你的应用程序是一款活跃的游戏,否则重新定义标准手势的含义会导致混乱和复杂。

避免干扰系统范围的屏幕边缘手势。根据设备的不同,屏幕边缘手势提供对主屏幕、应用程序切换器、通知中心、控制中心和Dock的访问。人们依靠这些手势在每一款应用程序中工作。在极少数情况下,游戏等沉浸式应用程序可能需要优先于系统手势的自定义屏幕边缘手势-第一次滑动调用特定于应用程序的手势,第二次滑动调用系统手势。此行为(称为边缘保护)应谨慎实施,因为它会使人们更难访问系统级操作。有关开发人员指南,请参见UIViewControllerpererredScreenEdgesDeferringSystemGestures属性。

提供快捷手势来补充(而不是取代)基于界面的导航和操作。只要有可能,提供一种简单、直观的方式来导航或执行操作,即使这意味着额外点击一两下。许多系统应用程序都包括一个导航栏,它提供了一个清晰的、可轻触的按钮,可以返回到上一个屏幕。但用户也可以通过从屏幕一侧滑动来向后导航。在iPad上,人们可以通过按下Home键或使用四指捏手势来退出主屏幕。

使用多指手势来增强某些应用程序的体验。虽然同时涉及多个手指的手势并不适合所有的应用程序,但它们可以丰富一些应用程序的体验,比如游戏和绘图应用程序。例如,游戏可能包括多个可以同时操作的屏幕控件,如操纵杆和点火按钮。

有关开发人员指南,请参阅UIGestureRecognizer

标准手势

人们通常希望以下标准手势在整个系统和每个应用程序中都能起到相同的作用。

此处包含动画,建议到原文体验

触觉

触觉利用人们的触觉来增强与屏幕界面互动的体验。例如,当一笔Apple Pay交易得到确认时,该系统除了提供视觉和听觉反馈外,还会播放触觉。触觉还可以增强触摸手势和互动,比如滚动选取器或切换开关。

在支持的iPhone机型上,你可以通过几种方式将触觉添加到你的应用程序中。

  • 使用标准的UI元素,如开关滑块拾取器,默认情况下播放苹果设计的系统触觉。

  • 当有意义时,使用反馈生成器播放通知、影响和选择类别中的几个预定义触觉模式之一。有关开发人员指南,请参阅UIFeedbackGenerator

  • 在你想要更多控制的情况下,创作和播放你自己的触觉模式。有关指南,请参见创建自定义触觉模式

当你使用系统触觉时,iOS会管理反馈的强度和行为。例如,交换机会自动播放一个微妙的轻击,而用于“成功”通知的反馈生成器会播放如下所示的模式。(有关开发人员指南,请参见动画和触觉。)

成功。表示任务或操作(如存入支票或解锁设备)已完成。

无论你是使用系统提供的触觉,还是创建自己的触觉,在不分散人们目标的情况下,以丰富用户体验的方式使用触觉是至关重要的。

用触觉进行设计

设计能够吸引人们触觉的界面可以将他们对现实世界的熟悉带到你的应用程序中。无论你如何在你的应用程序中产生触觉,下面的指导方针可以帮助你给人们带来凝聚力和引人入胜的体验。

在每个触觉和它的触发器之间建立一个清晰的因果关系。理想情况下,人们总是知道你的应用程序为什么要玩触觉模式。如果触觉不能强化因果关系,它可能会令人困惑,而且看起来是没有必要的。

用触觉的方式来补充你应用程序中的其他反馈。当你的应用程序的视觉、听觉和触觉反馈协调一致时-就像它们在物理世界中一样-用户体验会更连贯,看起来也更自然。

明智地使用触觉。例如,当触觉提供持久的价值时,就使用它们;使用它们来增加新颖性会让你的应用程序感觉很花哨。此外,更喜欢将触觉添加到少数重要的、相应的互动中。在大量琐碎的互动中玩触觉游戏会让人不知所措。

始终如一地使用触觉。触觉反馈的一致性有助于人们在某些触觉模式和某些体验之间建立触觉联系。例如,如果你的应用程序在游戏角色未能完成任务时播放特定的触觉模式,人们就会学会将该模式与负面结果联系起来。如果你使用相同的触觉模式来获得积极的结果,比如完成关卡,人们会感到困惑。

避免过度使用触觉。有时,触觉者偶尔体验时会感觉恰到好处,但当频繁体验时就会变得令人厌烦。一般来说,避免设计一种会产生延长或重复的触觉反馈的体验。通常,最好的触觉体验是人们可能没有意识到的,但当它关闭时却错过了。

一定要在你的应用程序中测试触觉。不同的人对触觉有不同的偏好和敏感度,所以你需要尽可能多的人来测试触觉。

将触觉设置为可选。如果人们愿意,可以让他们关闭或静音触觉,并确保人们在没有触觉的情况下仍然可以享受你的应用程序。

在游戏中,考虑使用自定义触觉来增强玩家体验的方法。除了在玩家与物品和控件交互时玩触觉之外,你可能还想玩帮助交流游戏中事件的触觉。例如,触觉可以增强实质性的体验-比如碰撞或撞击-或者微妙的体验-比如脚步接近或迫在眉睫的危险。

请注意,玩触觉游戏可能会影响其他用户体验。通过设计,触觉产生了足够的物理力量,让人们感觉到设备的振动。确保触觉不会破坏涉及相机、陀螺仪或麦克风的用户体验。

创建自定义触觉模式

自定义触觉模式可以代表释放弹弓或在隆隆地带上行驶之类的东西。定制模式也可以根据用户输入或上下文动态变化。例如,当游戏角色从树上跳下时,玩家感受到的冲击力可能比角色跳到原地时更强。

在iOS 13及更高版本中,Core Haptics提供了两个生成自定义触觉模式的基本构建块:

短暂事件,即感觉像轻击或冲动的短暂、紧凑的体验,例如轻触主屏幕上的手电筒按钮的体验。
连续的事件,感觉像是持续的振动,比如在信息中体验激光效应。
无论你选择哪种构建块来生成自定义触觉,你都可以控制其锐度和强度。

你可以把锐度想象成一种将触觉体验抽象到产生相应物理感觉的波形中的方法。通过指定清晰度,你可以向系统传达你对体验的意图。例如,你可以使用清晰度值来传达柔和、圆润或有机的体验,也可以使用清脆、精确或机械的体验。顾名思义,强度意味着触觉的力量。

通过组合瞬时和连续事件、不同的清晰度和强度,并包括可选的音频内容,你可以创建多种不同的触觉体验。有关开发人员指南,请参见Core Haptics

近场通信

近场通信(NFC)使彼此距离不到几厘米的设备能够无线交换信息。在支持的设备上运行的iOS应用程序可以使用NFC扫描从贴在现实世界物体上的电子标签读取数据。例如,用户可以扫描玩具以将其与视频游戏连接,购物者可以扫描店内标识以获取优惠券,或者零售员工可以扫描产品以跟踪库存。

有关开发人员指南,请参阅Core NFC

应用内标签读取

应用程序可以在应用程序处于活动状态时启用单对象或多对象扫描,并在用户需要扫描时显示扫描表。

NFC

不要鼓励人们接触实物。要扫描标签,iOS设备必须非常接近标签。它不需要实际触摸标签。当要求人们扫描物体时,使用诸如扫描和按住附近之类的术语,而不是轻拍和触摸。

使用通俗易懂的术语。有些人可能不熟悉近场通信。要使其易于使用,请避免引用面向开发人员的技术术语,如NFC、核心NFC、近场通信和标签。取而代之的是,使用大多数人都能理解的友好的会话术语。

使用这种 不要使用这种
扫描[对象名称] 扫描NFC标签
将iPhone放在[对象名称]附近以了解更多信息 要使用NFC扫描,请将手机轻触至[对象]

为扫描页提供简明的说明性文本。提供完整的句子,在句子的情况下,标点符号结束。确定要扫描的对象,并为后续扫描适当修改文本。文本要简短,以免被删节。

首次扫描 之后扫描
将iPhone放在[对象名称]附近以了解更多信息 现在把你的iPhone放在另一个[对象名称]附近

后台标签检测

后台标签检测可以让人们随时快速扫描标签,而不需要先打开你的应用程序并启动扫描。在支持后台标签读取的设备上,只要屏幕亮起,系统就会自动查找附近的兼容标签。在检测到标签并将其与应用程序匹配后,系统会显示一个通知,用户可以轻触以将标签数据发送到应用程序进行处理。请注意,当NFC扫描页可见、Wallet或Apple Pay正在使用、相机正在使用、设备处于飞行模式以及重新启动后设备被锁定时,后台读取将被禁用。

后台标签扫描

支持后台和应用内标签读取。你的应用程序仍然必须提供一种应用内扫描标签的方式,以供那些使用不支持后台标签读取的设备的人使用。

指针(IPadOS)

IPadOS13.4引入了动态指针效果和行为,增强了在iPad上使用指点设备的体验。当人们使用指点设备时,iPadOS会自动调整指针以适应当前环境,提供丰富的视觉反馈和恰到好处的精确度,以提高生产率和简化常见任务。

IPadOS指针系统为人们提供了一种与应用程序和内容交互的额外方式–它不能取代触摸。有些人可能会继续只使用触摸,而另一些人可能更喜欢使用指针或两者的组合。让人们选择如何与你的应用程序交互,避免压缩你的界面或做出需要他们使用指针的更改。

有关开发人员指南,请参见指针交互

启用指针交互

旨在提供一致的体验,无论用户使用的是触摸屏、指点设备还是键盘。人们倾向于在使用触摸和联网输入设备之间流畅地移动,他们不想为每种模式或使用的每个应用程序学习不同的交互。

确保当人们在连接的设备上使用熟悉的手势时,应用程序中的所有区域都能正确响应。例如,如果人们可以通过在屏幕上滑动手指来操作内容,那么考虑让他们通过在触控板上使用两个手指、用指针单击和拖动或移动鼠标滚轮来执行相同的操作是否有意义。有关开发人员指南,请参阅UIApplicationSupportsIndirectInputEvents

当用户在与应用程序中的对象交互时按住修改键,实现一致的体验。例如,如果人们可以通过在拖动对象的同时按住Option键来复制该对象,则无论他们是使用触摸还是使用指针拖动,结果都应该是相同的。

只有在指针和手指输入提供值的情况下,才能区分它们。例如,当人们使用指针时,洗涤器可以为他们提供一种额外的方式来定位视频中的某个位置。在这种情况下,用户可以使用指针或触摸拖动播放头,但可以使用指针悬停并单击精确的搜索目的地。

让人们使用悬停来显示和隐藏自动最小化或淡出的控件。例如,人们可以通过将指针悬停在Safari工具栏上来显示最小化的Safari工具栏(当指针移开时,工具栏会再次最小化)。人们还可以在观看全屏视频时悬停指针以显示或隐藏播放控件。

指针形状和内容效果

IPadOS集成了指针和悬停在其上的元素的外观和行为,将焦点带到了人们瞄准的项目上。你可以支持系统提供的指针效果,也可以修改它们以适合你的应用程序。

默认情况下,指针的形状是圆形,但当它悬停在特定元素或区域上时,它可以显示系统定义的或自定义的形状。例如,当指针悬停在文本输入区域上时,它会自动使用熟悉的I型梁形状。

对于内容效果,当指针悬停在UI元素或区域上时,指针下方的UI元素或区域也可以更改其外观。根据内容效果的类型,指针可以保留其当前形状,也可以转换为与元素的新外观集成的形状。

IPadOS定义了三种内容效果,可以将焦点集中到应用程序中不同类型的交互元素上:突出显示、提升和悬停。

突出显示效果将指针转换为用作控件背景的半透明圆角矩形,并包括柔和的视差。微妙的突出显示和移动将焦点带到控件上,而不会分散人们对任务的注意力。默认情况下,iPadOS会将突出显示效果应用于栏按钮、选项卡栏、分段控件和编辑菜单。

升降效果结合了微妙的视差和仰视的外观,使元素看起来像是漂浮在屏幕上方。当指针在元素下方淡出时,iPadOS会放大元素,同时在元素下方添加阴影,并在其上方添加柔和的镜面反射高光,从而创建提升的错觉。默认情况下,iPadOS会将升降效果应用于应用程序图标和控制中心的按钮。

悬停是一种常规效果,使你可以在指针悬停在元素上时将自定义比例、色调或阴影值应用于该元素。悬停效果组合了自定义值以将焦点带到项目上,但它不会改变默认指针形状。

磁性指针

除了通过指针转换和内容效果将焦点带到元素之外,iPadOS还可以通过使元素看起来吸引指针来帮助人们确定元素的目标。当人们将指针移动到一个元素附近,或者将指针指向一个元素时,就可以体验到这种磁效应。

当人们将指针移到元素附近时,一旦指针到达元素的命中区域,系统就会立即开始变换指针的形状。由于命中区域通常延伸到元素的可见边界之外,因此指针在似乎接触元素之前就开始变形,从而产生元素正在将指针拉向它的错觉。

当人们将指针指向某个元素时,iPadOS会检查指针的轨迹,以发现最有可能成为目标的元素。当指针路径中有元素时,系统会利用磁力将指针拉向该元素的中心。

默认情况下,iPadOS会对使用升降效果(如应用程序图标)和高亮效果(如条形按钮)的元素施加磁力,但不会对使用悬停效果的元素施加磁力。因为支持悬停的元素不会改变默认的指针形状,所以添加磁性可能会不和谐,可能会让人感觉失去了对指针的控制。

该系统还对文本输入区域施加磁力,如果人们在选择文本时进行意外的垂直移动,它可以帮助人们避免跳到另一行。

支持标准指针和效果

如果可能,请启用系统提供的内容效果。人们很快就习惯了他们在整个系统中看到的内容效果,并通常希望他们的体验适用于他们使用的应用程序。要提供一致的用户体验,请坚持每种效果的设计意图。具体而言:

  • 对具有透明背景的小元素使用高亮显示。
  • 对背景不透明的小元素使用Lift。
  • 对较大的元素使用悬停,并根据需要自定义比例、色调和阴影属性(有关指导信息,请参阅自定义指针形状和效果)。
  • 对于标准按钮和文本输入区域,首选系统提供的指针外观。当指针以他们期望的方式运行时,你可以帮助人们更轻松地使用你的应用程序。

在交互元素周围添加填充以创建舒适的点击区域。你可能需要进行实验来确定元素命中区域的合适大小。如果命中区域太小,可能会让人觉得在与元素交互时必须格外精确。另一方面,当元素的命中区域太大时,人们会觉得将指针从元素中拉出需要付出很大的努力。通常,在包含边框的元素周围添加大约12个点的填充效果很好;对于没有边框的元素,在元素的可见边缘周围添加大约24个点的填充效果也很好。

为自定义栏按钮创建连续的点击区域。如果条中相邻按钮的点击区域之间有空间,当指针在按钮之间移动时,指针短暂恢复到默认形状时,人们可能会体验到分心的运动。

指定接收提升效果的非标准元素的拐角半径。使用系统提供的提升效果,指针会在元素淡出时进行变形,以匹配元素的形状。默认情况下,指针使用系统定义的拐角半径转换为圆角矩形。如果你的元素是不同的形状-例如,如果它是一个圆-你需要提供半径,以便指针可以无缝地动画化为元素的形状。开发者指导请参考UIPointerShape.round dedRect(_:RADIUS:)。

自定义指针形状和效果

对于行为类似标准元素的自定义元素,首选系统提供的指针效果。当自定义元素的行为类似于标准元素时,人们通常希望使用熟悉的指针交互来与其交互。例如,如果自定义导航栏中的按钮没有使用标准的突出显示效果,人们可能会认为它们损坏了。

在整个应用程序中以一致的方式使用指针效果。例如,如果你的应用程序帮助人们绘画,你应用程序中的每个绘图区域都应该支持类似的指针体验,这样人们就可以将他们在一个区域获得的知识应用到其他区域。

避免创建不必要的指针和内容效果。当指针或其下方的UI元素的外观发生更改时,人们会注意到这一点,并期望这些更改是有用的。创造一种纯粹的装饰性指针效果可能会分散人们的注意力,甚至会激怒人们,而不会提供任何实际价值。

保持自定义指针形状简单。理想情况下,指针的形状表示人们在当前环境下可以采取的操作,而不会引起太多关注。例如,Keynote将指针转换为一对箭头,用于显示用户可以拖动选择手柄的方向。如果人们不能立即理解你的自定义指针形状,他们很可能会浪费时间去了解该形状的含义。

考虑通过显示提供有用信息的自定义批注来增强指针体验。例如,当指针悬停在应用程序中的绘图区域上时,你可以显示X和Y值。Keynote使用注释显示可调整大小的图像的当前宽度和高度。

避免使用指针显示说明性文本。显示说明性文本的指针可能会让应用程序看起来很复杂,很难使用。不是提供说明,而是优先考虑界面的清晰度和简单性,这样人们就可以快速掌握如何使用你的应用程序,无论他们是使用指针还是触摸屏幕。

定义自定义悬停效果时,请考虑阴影、比例和元素间距之间的相互影响。通常,为可以增大大小而不会拥挤附近图元的图元保留缩放比例。例如,缩放不适用于表格行,因为如果不重叠相邻行,行就无法展开。对于周围空间很小的元素,请考虑使用包括色调但不包括比例和阴影的悬停效果。此外,使用阴影而不包括缩放效果也不好,因为未缩放的元素看起来不会更靠近查看器,即使它的阴影暗示该元素提升到屏幕上方。

撤消和重做。

许多应用程序允许人们摇动设备来撤消和重做某些操作,如键入或删除。以这种方式启动时,会出现一个警报,要求用户确认或取消撤消或重做操作。

简明扼要地描述要撤消或重做的操作。撤消和重做警报标题自动包括前缀“撤消”或“重做”(包括尾随空格)。你需要提供一个或两个附加单词来描述正在撤消或重做的内容,以显示在此前缀之后。例如,你可以创建警报标题,如“撤消名称”或“重做地址更改”。

如果你使用摇动手势来撤消和重做,请不要将其用于其他操作。虽然你可以通过编程的方式赋予摇动手势多种含义,但这样做可能会让人们感到困惑,并使你的应用程序变得不可预测。

谨慎地提供撤消和重做按钮。当应用程序提供多种方式来执行同一任务时,这是令人困惑的。如果你的应用程序确实需要专用的撤消和重做按钮,请使用系统提供的标准图标,并将它们放在预期的位置,如导航栏。

仅在当前上下文中执行撤消和重做操作。撤消和重做应该对当前上下文(而不是以前的上下文)产生明确和即时的影响。

有关开发人员指南,请参阅UndoManager