写 「iPad Pro:从现状到未来 」这篇关于 iPad Pro 的文章时,我是把 Drag & Drop 当作 Share Sheet 的替代品的,一种在 App 之间传递文件和复制粘贴的更方便的做法。

而随着 iOS 11 的正式推出,大量 App 适配 iOS 11 并增加了对于 Drag & Drop 的支持。这几天时间仅是少数对 Drag & Drop 支持得比较好的 App 就完全改变了我对于 Drag & Drop 甚至 iOS 的看法。

我以为的 Drag & Drop

Mac 上拖拽功能大有年头。近年来比较 iPad Pro 和 Mac 时,Mac 上的拖拽功能常常被提出来。Mac 上我们用拖拽来处理文件,比如移动文件位置、把文件拖拽到 App 图标上打开文件等。

WWDC 之后我对于 iOS 上的拖拽的印象也是大致如此,功能有如下几项:

  1. 文件的传递。从 Files 中拖入拖出文件,把图片拖到 iMessage 里等。
  2. 文字的复制粘贴。把文字拖到支持输入文本的地方。
  3. 把网址拖拽到 Safari 网址栏的刷新摁钮和 Safari 右上角的新建标签页上,效果分别是在当前页打开和新建标签页打开。
  4. 从 Dock 栏拖拽 App 进行分屏。如果你外接了键盘,你可以使用 Command + Space 唤出 Spotlight,输入 App 的名称,并拖拽分屏。
  5. iOS 上的拖拽支持多个对象,比如说你可以把一个 App 拖拽起来之后,单击其他 App 图标,把这些 App 一起移动。

这几种拖拽功能就是我从 iOS 11 beta 1 一直用到正式版以来所有的印象,而我常常使用的功能也只有三个。可以说拖拽功能一直没有让我觉得这是一个为 iOS 带来很大改变的功能。

App 对于 Drag & Drop 的适配

我在 Twitter 上看到 Annotable 发布了一段 使用拖拽功能的短视频,不禁感叹拖拽功能也是有用起来很酷的时候。而 iOS 11 正式发布之际,App Store 迎来了大量更新,有很多 App 都适配了拖拽功能,其中不乏几个很有想法的 App。这次我才渐渐意识到拖拽功能的真正作用。

在 Annotable 的例子中,从添加文件、文字到最后的导出都是使用拖拽功能完成的。在 Share Sheet 的最上方展示做出来的图片,可以方便地分享到别的 App 而省掉了保存及删除图片的事情。

Annotable Share Sheet 上展示的图片

Notability 和 Goodnotes 支持在笔记界面拖入图片,支持把 PDF 拖入而实现导入。这些吸引力可能都不是很大。让我觉得很酷的是导出部分,你可以用圈选工具选中你的一部分笔记,并把笔记以图片的形式拖拽出来分享给别人。而 Goodnotes 因为内置 OCR,当分享到的 App 只支持文字的时候,Goodnotes 会把你的笔记识别为文字分享出来。

Goodnotes 拖拽到 Drafts 中

Instapaper 支持直接把网址拖入来存文章。在 iPad 上阅读长文时,边读边把文中引用到的文章加入稍后读的体验会比使用 Workflow 更好一些。同时,Instapaper 支持把文章以网址的形式拖出,也支持把文章中的高亮拖出分享。哦,当然 Pocket 也更新了。Pocket 支持了 iOS 9 引入的分屏功能,可喜可贺。

还有很多任务管理 App 也主要添加了对于拖入的支持。Todoist 加入了拖入图片、链接、地图、邮件等支持。你也可以直接把文件拖入添加附件。Things 也支持拖入文字、邮件、图片等等,只是处理方式和 Todoist 不太一样,Things 会把拖进来的东西都放在备注中。OmniFocus 也增加了对拖拽的支持,不过根据其官网貌似只支持拖入拖出文字。但 OmniFocus 可以对于特定格式的文字自动添加 Flag、起始和截止日期,还可以把列表添加为多个任务。

OmniFocus Drag&Drop 列表

当然还有很多 App 也都适配了拖拽功能,比如 Readle 的 App,在这里只是举了一些给我比较深印象的 App 的例子。我们可以看到,Goodnotes 可以根据你目标 App 的不同,导出图片或者文字。Instapaper 根据你拖出的内容不同而做一定的优化:拖出高亮的时候,会附上文章链接,方便你分享。

我们也可以看到,任务管理 App 支持拖拽,让我们给任务添加附件方便了许多。按照 OmniFocus 的思路,说不定我们以后可以在一个文字输入 App 中输入多个任务的文字,把文字拖拽到任务管理 App 上就实现了批量添加。这个思路对于日历 App 也可以大有作为。

其实当我们拖拽时,拖拽的并不是单一内容。比如说拖拽邮件时,实际上是同时拖出了纯文本、富文本和邮件链接。被拖拽的内容会和一个名为 Uniform Type Indentifier(UTI)的数据,这个数据描述了你拖出的内容可以是什么数据类型。而接收的 App 可以指定自己可以接收的数据类型。这样一来,开发者们可以自定义你把各种数据拖入时的效果。

将邮件拖入 Todoist

自定义拖入效果的例子就是 Todoist 和原生邮件客户端的配合。现在从 Mail Drag&Drop 邮件到 Todoist 时,Todoist 会接收其中的纯文本(邮件题目)和邮件链接,并把这两个合在一起,新建一个点击题目就可以跳回邮件的任务。

而除了 Todoist 和 Mail 以外的配合还没有那么美好:目前 Airmail 只能拖出邮件链接,从 Mail 拖出邮件到 Things 时,Things 只接收了链接,但是没有题目。可以说都不如 Todoist 和 Mail 配合的好。但是可以我相信未来很多开发者都会更注意自己的 App 和其他 App Drag&Drop 时的效果的。

Ulysses 上的 Drag&Drop

在 App 内拖拽最先引起我注意的是 Castro(iPhone 上可以完成 App 内拖拽)。Castro 可以使用 Drag&Drop 对播客的顺序,归档还是排入队列等进行操作。之后 Ulysses 也宣布了下一个版本会支持使用 Drag&Drop 整理文稿。Timepage 现在也支持了使用 Drag&Drop 调整事件的日期,包括在 iPhone 上。

Castro&Timepage

Drag & Drop 的意义

OK,我们有了一些新的方式复制粘贴、移动文件、添加任务、整理顺序。那 Drag&Drop 有什么意义呢?我认为 Drag&Drop 对于 iOS 来说意义重大。

在我眼中,iOS 的 Drag&Drop 是已经超越 macOS 的了。macOS 一直主要都是拖拽文件:把文件移动位置,移动到 App 的图标上打开。但是除了文件以外 macOS 上的拖拽并没有什么其他应用场景。macOS 不是为了拖拽 everything 设计的。

而 iOS 并不是基于键盘、鼠标的电脑系统,iOS 是一个直观的、基于触控的系统。这意味着在操作 iOS 时应该比 macOS 更富有反馈、更所见即所得、更不需要思考。但是 Drag&Drop 之前的 iOS 显然没有做到这一点,我们需要使用 Share Sheet,需要使用各种「选择」来给文稿排序。如同 Castro 的开发团队 Supertop 所写

「很多在 iOS 上的工作流是乏味的,需要点击、滑动、特殊的『编辑』模式,移到顶部来上移屏幕,最后还要找『完成』摁钮。」

那如何更加直观有趣呢?

首先是技术上的保障。细致的 API 让开发者可以决定能不能接受多个项目或多种类别、自定义拖起和拖入动画、是复制还是移动、甚至要不要用 Document Picker。而 UTI 使开发者面对 Drag&Drop 可以做出更符合直觉的效果。「当用户拖这样一个项目过来时,他是想要链接还是纯文本还是富文本呢?」随着开发者们对 Drag&Drop 理解的不断加深和打磨,我相信很多 App 是可以做到你把一个东西拖过去时,正好得到你想要的效果的。

其次是 UI 上的引导。用户不会挨个地方尝试支不支持 Drag&Drop 和会得到什么效果。这需要开发者在设计 UI 的时候,就让用户意识到什么东西可以拖动,可以拖到哪里。比如说 Things 中左下角的「添加到收件箱」,Castro 下面的蓝色圆圈等。

Things 和 Castro 在 UI 上的引导

为了 Drag&Drop 而设计的 UI 会是更加直观的,我认为也可以说是更加「iOS」的。现在不再需要在某一个角落找到「Edit」或者「Select」,或者是对于一个东西(文件、文章等)右划打开类似 Share Sheet 的功能「Move」,然后选择要移动的位置。

现在我们只需要直接拖拽就可以了。所以 Drag&Drop 也是可以代替 App 内的 “Share Sheet” 的。这一切都让 iOS 越来越适合「直接操控」,也很可能会对 iOS App 的设计带来巨大的改变。

App 内的“Share Sheet”

最后还有一点,iOS 上的 Drag&Drop 支持 Multitouch。比如说可以同时移动多个 App,同时把 Instapaper 中多篇文章拖拽出来。更重要的是,你可以一个手指拖拽着东西,摁下 Home 键,打开别的 App 拖进去。记得 macOS 上想要把文件拖到一个深层文件夹时的长时间等待吗?与之相比,iOS 则是一个可以让你用你的十根手指释放潜力的系统。

24
4