【问题标题】:Advice for a Cocoa drawing application可可绘图应用程序的建议
【发布时间】:2011-08-27 01:38:00
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • 我绝对不建议使用NSCell。甚至NSTableView 在其最新迭代中也已远离它。 NSCell 不好玩。
  • 如果没有已经。里面有很多好主意。

标签: cocoa drawing nsview cocoa-design-patterns


【解决方案1】:

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

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

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

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

【讨论】:

  • 好吧,一切都取决于典型的用例 - 如果应用程序通常需要处理数千个对象,我宁愿避免使用数千个 NSView 实例并预先选择不同的设计。跨度>
猜你喜欢
  • 1970-01-01
  • 2015-07-25
  • 1970-01-01
  • 1970-01-01
  • 2023-04-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多