简单的绘图应用程序设计 - Hillegass Book,Ch。 18

时间:2010-06-14 18:07:58

标签: objective-c cocoa macos

我正在为Aaron Hillegass' Mac OS X的可可编程工作,我正在为第18章做挑战。基本上,挑战是编写一个可以使用鼠标绘制椭圆的应用程序,以及此外,添加保存/加载和撤消支持。我正在尝试为MVC之后的这个应用程序设计一个好的类设计。这就是我的想法:

有一个代表椭圆形(比如JBOval)的NSView子类,我可以使用它来轻松绘制椭圆形。 有一个主视图(JBDrawingView),它包含JBOvals并绘制它们。

问题是我不确定如何添加存档。我应该归档每个JBOval吗?我认为这样可行,但归档NSView似乎效率不高。关于更好的班级设计的任何想法?

感谢。

3 个答案:

答案 0 :(得分:1)

每个椭圆形都有一个完整的NSView对我来说似乎相当重要。我会从NSObject下载它们,然后让它们绘制到当前视图。

他们也可以知道如何归档自己,虽然在那时你可能想要将它们从视图中拉出来并将它们视为模型的一部分。

答案 1 :(得分:1)

  

有一个代表椭圆形(比如JBOval)的NSView子类,我可以用它来轻松绘制椭圆形。

这听起来不是很MVC。 “JBOval”听起来像是我的模特课。

  

拥有一个包含JBOvals并绘制它们的主视图(JBDrawingView)。

我喜欢这部分。

我的建议是让每个模型对象(JBOval等)能够创建一个代表自己的Bézier路径。 JBDrawingView(你应该为它提出一个更好的名称,因为根据定义绘制的所有视图)应该询问每个模型对象的Bézier路径,填充设置和笔触设置,并相应地绘制对象。

这保留了如何在它们所属的各种形状类中绘制(路径,线宽,颜色等)的知识,同时还将实际绘图代码保留在它所属的视图层中。

从这一点来看,答案显示归档代码的位置应该是直观明显的。

答案 2 :(得分:0)

你的JBOval视图将负责绘制自己(基本上绘制一条椭圆形路径并在其范围内填充它),但JBDrawingView将负责鼠标和拖动(从而调整大小和定位JBOvals,这将是它的子视图)。 drawingView不会自己绘制。

就归档而言,您可以使用模型类来表示每个椭圆(例如其边界矩形,或者您选择用于表示每个椭圆的任何其他尺寸)。您可以归档和取消归档这些模型以重新创建视图。

最后,也使用JB前缀,所以......:P就在你身边。