如何模仿Automator的工作流程视图?

时间:2010-04-05 15:32:19

标签: cocoa nsview nscollectionview

我开始开发我的第一个完整的Cocoa应用程序,其中包含一个我希望表现(和看起来)类似于Automator的AMWorkflowView的视图。

我想要实现的基本功能:

  • 子视图的定位
  • 以展开/折叠状态显示子视图
  • 多项选择
  • 拖放

为了习惯Cocoa,我开始使用自定义NSView,它主要用作自定义子视图的容器,并处理它们的定位和多项选择。 子视图也是NSView的子类,并且包含可变数量的视图本身,如按钮,标签和弹出菜单,因此可以具有不同的高度。 这非常有效,但在继续之前,我想确保根据MVC模式让一切都干净整洁。

我怀疑Cocoa中已经有一个类可以促进视图容器的实现,例如NSCollectionViewIt seems that there is no (easy) way {{3}}可以在NSCollectionView中显示不同大小的视图。我应该继续实施自定义NSView(可能使用NSArrayController进行选择和排序支持),还是有更好的方法可以使用?

非常感谢任何帮助

1 个答案:

答案 0 :(得分:0)

不幸的是答案是你必须自己动手。 NSCollectionView不允许使用可变大小的项目(这也会排除展开/折叠状态)。

对于有限数量的项目,您可以相当轻松地完成此任务(您只需要一个容器视图,在要求布局时正确排列子视图,然后您需要确保在事情发生变化时重新布局)。但是,对于许多子视图,您需要注意尽可能高效。这可以从尽可能少的布局开始(例如,仅在调整大小的视图之后),并且像缓存原型视图的可视化表示一样复杂,为除了视图之外的所有视图绘制缓存图像(快!)正在编辑,并且只对正在编辑的视图使用/定位“真实”视图。

拖放的工作方式与以往一样,但上面没有适用于漂亮动画NSCollectionView的帐户。 :-)它快速而精美地动画精确因为所有子视图都是统一的(所以布局计算快速而简单)。添加不规则尺寸后,问题会变得更加复杂。

底线:如果您需要大小不一的视图,NSCollectionView将无效,您需要自己动手或找到其他人的共享代码,但性能和漂亮的动画并不容易。< / p>