今天在做 Linnky 的 drag & drop 功能,就是可以把书签直接拖到侧边栏的收藏夹、标签来快速修改一些属性。
Drag & drop 本身是很简单的功能,实现起来很方便,但是体验做的好却不容易,Cocoa 默认的行为就是拖出和 cell 一模一样的一个视图出来,原来的 cell 有多宽有多高,都不会改变,而且因为 cell 一般不会去设置背景色,拖出来是个透明的视图,效果很不好。
Cocoa 的很多 API 虽然很古老(可以看看 2011 年 WWDC 的视频,基本没有变化),但是定制这些细节的 API 还是有的。观察了一下几个比较著名的应用 drag & drop 体验,可以说最新出的 Things 是最好的。Things 的确花了很多时间在交互细节上,我在做自己应用的时候现在都往 Things 去学习。
可以看到 Things 拖出来后是保持和选中的 Cell 样式一样的,带着选中的蓝色,我自己实现的时候研究了这里,这不是默认的,也是 Things 自己实现的。当拖动到 Sidebar 的时候,Things 还更新了 Dragging Image,让高度小于 Sidebar cell 的高度,宽度同时也变小,这样的更新方便用户能精准的拖到目标位置。在 WWDC 2011 关于 NSTableView 的 Demo 里也提到了这个。
对比了我电脑上装的其他两个著名的 GTD 应用,OmniFocus 和 2 Do,就没有优化这里,还是和我的一样默认效果,可以看到透明背景上面有原来 Cell 全部的元素,给人的感觉并不好。
这点小细节我还是非常佩服 Things 的,最新分析了 Thing 3 UI 上的一些变化,我觉得这个应用确实是需要花大量时间才能做出来的。不多说,向 Things 学习。