2010-04-05 49 views
1

我开始开发我的第一个完整的Cocoa应用程序,其中包含一个我希望类似于Automator的AMWorkflowView的行为(和看起来)的视图。如何模仿Automator的工作流程视图?

的基本特征,我想实现:

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

为了习惯Cocoa,我开始定制NSView,主要用于交流ontainer用于定制子视图并处理它们的定位和多选。 子视图也是NSView的子类,它们本身包含可变数量的视图,如按钮,标签和弹出菜单,因此可以有不同的高度。 这工作得很好,但在继续之前,我想确保根据MVC模式将所有内容整齐整齐。

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

任何帮助深表感谢

回答

0

很不幸,答案是你必须推出自己的。 NSCollectionView不允许可变大小的项目(这也排除了展开/折叠状态)。

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

拖放的工作方式与以往一样,但以上都不包含漂亮的动画NSCollectionView。 :-)它快速而精美 - 精确地动画,因为所有的子视图都是统一的(所以布局计算是快速和简单的)。一旦添加不规则尺寸,问题就会变得更加复杂。底线:如果您需要不定尺寸的视图,NSCollectionView将无法​​正常工作,您需要自行推出或查找其他人的共享代码,但是性能和美观的动画并非易事。

+0

感谢您的回答。我已经怀疑这一点。我将尝试重现'NSCollectionView'和它的'NSCollectionViewItems'的体系结构。 – andyfeind 2010-04-07 14:27:13