用户体验 – 拖放
用一根手指,用户可以移动或复制选定的照片、文本或其他内容,方法是将内容从一个位置拖到另一个位置,然后抬起手指将其放下。
触摸并按住所选内容使其看起来上升并附着在用户的手指上。 拖动内容时,动画和视觉提示会标识可能的目的地。 系统还会显示一个标记,指示何时无法删除,或者将导致复制内容而不是移动内容。
来源和目的地
拖放涉及将所选内容从源位置移动到目标位置。 这些位置可以在同一个容器中,如文本视图,也可以在不同的容器中,如拆分视图相对侧的文本视图。 例如,在便笺中,用户可以将选定的文本拖到同一便笺中的新位置。 在提醒事项中,用户可以将单个提醒事项从一个列表中拖出并放到另一个列表中。
在 iPad 上,源位置和目标位置也可以存在于不同的应用程序中,从而实现跨应用程序交互,例如将照片从 Safari 中的网页拖动到邮件中的新消息。 在拖动内容时,用户可以通过多任务处理、退出到主屏幕或从屏幕底部向上滑动以显示 Dock 来访问另一个应用程序。
笔记
在应用程序之间拖放内容总是会导致内容重复,而不是移动。
支持拖放
拖放是一种高效、直观的功能,用户希望在整个系统中普遍实现。如果您的应用包含或生成文本、照片、视频、音频或其他人们可能想要移动、复制或插入的内容,则您的应用应支持拖放。
为所有可选择和可编辑的内容提供拖放功能。可选择的内容应该是可拖动的,可编辑的内容应该接受放置的内容。还要确保您的应用支持在这些区域复制和粘贴。
在适用时允许将内容放在控件上。通常,配置启用数据输入或选择的控件(如文本字段)以接受删除的内容。
尽可能使用标准文本视图和文本字段。这些系统提供的元素包括对拖放的内置支持。有关相关指南,请参阅文本字段和文本视图。有关开发人员指南,请参阅 UITextField 和 UITextView。
为了提高效率,请考虑支持多项目拖放。在许多应用程序中,用户可以用一根手指拖动单个项目,并在拖动时用另一根手指点击其他项目来选择它们。所选项目一起移动并堆叠在拖动原始项目的手指下方。然后用户将这些项目作为一个组拖动并将它们放在所需的目的地上。例如,主屏幕允许同时选择多个应用程序图标并将其拖到一个文件夹中。某些应用程序(如照片)提供了一种选择模式,可以在拖动之前选择多个项目。
确定在您的应用程序中拖放内容应导致移动还是复制。一般来说,当源容器和目标容器相同(在文档中拖动文本)时,移动是有意义的,而当它们不同时(在文档之间或应用程序之间拖动),复制是有意义的。然而,情况并非总是如此。最重要的是,拖放行为应该直观。在提醒事项中,在列表之间拖动提醒事项会移动它们而不是复制它们,因为这是人们所期望的。在应用程序之间拖放内容总是会产生一个副本。
只要有可能,让人们撤消拖放操作。通常,当用户无意中将内容放到错误的目的地时,他们应该能够使用 Undo 将您的应用程序恢复到之前的状态。也就是说,删除的内容应该被删除,如果它是从应用程序的其他地方移动的,则恢复到其原始位置。
考虑启用弹簧加载。使用弹簧加载,用户可以通过将选定的内容拖到某些控件上并在不放下内容的情况下短暂暂停来激活某些控件,例如按钮和分段控件。例如,在“邮件”中,可以将选定的邮件拖到导航栏的“后退”按钮上以到达邮箱层次结构中的其他位置。永远不要让弹簧加载成为激活控件的唯一方法。将其用作可以发现的点缀。在大多数情况下,弹簧加载控件也应该响应点击手势。有关开发人员指南,请参阅 UISpringLoadedInteraction。
提供拖动内容
如有必要,自定义拖动项目预览。一般来说,用户手指下显示的预览应该是被拖动内容的半透明表示。此外观提供上下文,指示正在进行拖动,并使用户能够查看拖动内容下方的目的地。
只要有可能,提供拖动数据的多种表示,按保真度从高到低排序。例如,在提供艺术线条时,您的应用程序可以按顺序提供 PDF 矢量表示、具有透明度的无损 PNG 图像和不具有透明度的有损 JPEG 图像。这样,目的地可以选择它可以导入的最高质量的表示。
在适用时,将自定义对象的本机版本显示为最丰富的数据形式。例如,允许人们拖动图表的应用程序应首先显示本机图表对象。然后,它应该为不支持图表对象的应用程序提供替代方案——比如图表的图像版本。
当应用程序的内容传输耗时或资源密集时,实现文件提供程序扩展。文件提供程序扩展管理传输过程并确保它完成,即使您的应用程序不再运行。请注意,在用户删除内容之前,传输过程不会开始。有关开发人员指南,请参阅 NSFileProviderExtension。
当您的应用程序的内容需要时间传输时提供进度信息。如果必须下载内容或复制大文件需要时间,请提供进度信息。至少,提供内容的总大小,以便目的地可以计算剩余时间并显示适当的进度指示器。有关开发人员指南,请参阅 NSProgress。
接受丢弃的内容
使用视觉提示来识别潜在目的地并预览丢弃内容的效果。突出显示、插入点指示器和动画都是识别可能目的地的好方法。当内容被拖动到视图上时,视图可能会巧妙地闪烁并改变颜色,或者段落可能会分开以便为拖动的图像腾出空间。当屏幕上有多个可能的目的地时,一次确定一个。如果源容器和目标容器相同,则可能不需要突出显示,除非将内容完全拖出源然后重新输入。当内容被丢弃或不再位于目的地上方时,确保删除突出显示。
在适当的时候自动滚动目的地的内容。当内容被拖动到目的地边界之外时,您的应用可能需要确定是滚动目的地的内容还是允许用户继续拖动到完全不同的目的地。如果您的应用允许用户继续拖动,请考虑定义一个区域,当拖动的项目位于其上方时会导致自动滚动。例如,当内容被拖到正文区域的顶部或底部时,邮件中的冗长草稿邮件会自动滚动。标准文本视图和文本字段会自动采用此行为。
提取并显示最丰富的内容表示。例如,您的应用可能会提供多种图表表示形式。如果您的应用程序支持图表,它可以提取并显示本机图表对象。如果您的应用不支持图表,它可以提取并显示图表的图像版本。
在适用的情况下,仅提取已删除内容的相关部分。例如,如果用户将联系人从“联系人”拖到“邮件”消息中的收件人字段,则仅使用姓名和电子邮件地址,而不使用联系人的地址信息。
删除内容后,在表格视图和集合视图中显示占位符。占位符临时指示完成传输后内容将驻留的位置。
当丢弃的内容需要时间传输时显示进度。默认情况下,当应用程序之间发生耗时的传输时,系统会显示应用程序模式警报。考虑自定义显示进度的方式——例如通过在表格视图或集合视图中的占位符上显示进度指示器——这样用户就不会被阻止使用你的应用程序。请注意,在用户删除内容之前,传输过程不会开始。
在删除的内容启动流程时提供反馈。如果用户将内容放到启动任务的控件上(例如,将视频上传到共享站点),则表明该任务已开始,并让用户了解其进度。
丢弃失败时通知用户。如果删除的内容无法插入,可能是因为文件传输中断,请通知用户删除不成功。
对删除的文本应用适当的样式。当源和目标支持相同样式的文本属性时,放置的文本应保持其原始字体、字样、大小和其他属性。否则,放置的文本应采用目的地的样式。
当用户无法立即撤消拖放操作时,请考虑提供一种微妙、直观的方式来选择退出。例如,共享应用程序可能会在发布删除的内容之前显示一个中间共享表。该共享表可以提供一种提供附加内容(如状态消息)的方法,同时还提供取消按钮。将照片拖入共享照片流时,照片会表现出此行为。