对Cocoa绘图应用程序的建议

时间:2011-08-27 01:38:01

标签: cocoa drawing nsview cocoa-design-patterns

我是Cocoa的新手,正在为经验丰富的Cocoa-ers的应用程序寻找一些建议。

我正在构建一个基本的OmniGraffle风格的应用程序,其中对象被绘制/拖动到画布上。在对象在画布上之后,可以选择它们来修改它们的属性(填充颜色,笔触颜色/宽度等),调整大小,移动到新位置等。

为了预热,我编写了一个基本的绘图应用程序,用于创建由鼠标在自定义NSView上绘制的对象(圆形,矩形等),将对象添加到{{1}收集,并将集合的内容呈现到视图中。我可以继续这样,但我将不得不添加对检测对象选择,解析z-indexing,焦点突出显示,拖动句柄等所有相关渲染的支持。此外,渲染每个周期的每个对象似乎非常浪费。

似乎更好的方法是将轻量级视图对象拖放到能够检测自身上的鼠标事件,绘制自身及其聚焦环等的画布上。然而,虽然NSArray似乎是具有这些属性的对象,但我在网上看到很多关于它是一个有很多包袱的重量级组件的喋喋不休。我偶然发现了NSView并阅读了它们,但我不确定它们是否是正确的选择。

有什么建议吗?如果你能在正确的方向上推动我,我会非常感激。

1 个答案:

答案 0 :(得分:3)

优化的第一条规则:不要先做。

每个形状的自定义NSView听起来对我来说都是正确的。您是否想要不同形状的不同子类将取决于您;我从一个通用的形状视图类开始,形状能够将自己描述为Bézier路径,但是如果它更容易,那么不要过于严格地保持它 - 改变它。只是实现它,但它对你有意义。

然后,一旦你有了它的工作,请对其进行分析。制作尽可能多的形状。然后做更多。高多边形形状。交叉口。填充,描边,阴影和渐变。您可能应该为每个压力源创建一个单独的文档。请注意在用户级别什么是慢的。然后,在“仪器”下运行您的应用程序,并查看它为何缓慢。

也许观点会成为错误的解决方案。别忘了看看CALayers。但是,在你尝试并测量它之前,不要把任何事情排除在外。