5

我是 Cocoa 的新手,正在向有经验的 Cocoa 开发者寻求一些关于应用程序的建议。 

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

为了热身,我编写了一个基本的绘图应用程序,它创建由鼠标在 custom 上绘制的对象(圆形、矩形等)NSView,将对象添加到NSArray集合中,并将集合的内容呈现到视图中. 我可以继续这样做,但我将不得不添加对检测对象选择、解析 z 索引、焦点突出显示、拖动手柄等所有相关渲染的支持。此外,在每个循环中渲染每个对象似乎非常浪费。

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

有什么建议么?如果您能将我推向正确的方向,我将不胜感激。

4

1 回答 1

3

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

每个形状的自定义 NSView 听起来对我来说是正确的。您是否需要不同形状的不同子类取决于您;我会从一个通用的 shape-view 类和能够将自己描述为 Bézier 路径的形状开始,但不要太严格地坚持这一点——如果它更容易就改变它。只需实施它,但它对您有意义。

然后,一旦你得到它的工作,配置它。尽可能多地制作形状。然后做更多。高多边形数形状。十字路口。填充、描边、阴影和渐变。您可能应该为每个压力源创建一个单独的文档。仅在用户级别注意什么是慢的。然后,在 Instruments 下运行你的应用程序,看看为什么它很慢。

也许意见会成为错误的解决方案。不要忘记查看 CALayers。但是,在您尝试并测量它之前,不要排除任何慢的可能性。

于 2011-08-27T02:37:47.043 回答