Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Macos 您如何开发一个应用程序来在Cocoa中绘制、编辑和保存UML模型?_Macos_Cocoa - Fatal编程技术网

Macos 您如何开发一个应用程序来在Cocoa中绘制、编辑和保存UML模型?

Macos 您如何开发一个应用程序来在Cocoa中绘制、编辑和保存UML模型?,macos,cocoa,Macos,Cocoa,单个UML图形状是NSView子类还是NSBezierPath?图表是如何创建和管理的?您看过OmniGraffle吗?它可以满足你的需要 [与编程无关的答案…]您看过OmniGraffle吗?它可以满足你的需要 [与编程无关的答案…]您看过/Developer/Examples/AppKit中的草图示例项目了吗?它至少能让你走到一半的地方。你看过/Developer/Examples/AppKit中的草图示例项目了吗?它至少能让您达到目标的一半。您通常从NSView子类开始,以表示您的“画布”

单个UML图形状是NSView子类还是NSBezierPath?图表是如何创建和管理的?

您看过OmniGraffle吗?它可以满足你的需要


[与编程无关的答案…]

您看过OmniGraffle吗?它可以满足你的需要


[与编程无关的答案…]

您看过/Developer/Examples/AppKit中的草图示例项目了吗?它至少能让你走到一半的地方。

你看过/Developer/Examples/AppKit中的草图示例项目了吗?它至少能让您达到目标的一半。

您通常从NSView子类开始,以表示您的“画布”,并处理绘图和鼠标/键盘事件。您可能会在绘图方法中使用NSBezierPath来填充和勾勒形状。根据绘图代码的复杂程度,您可以将所有内容都放在NSView子类中,或者创建一个NSCell子类,以完成NSView的一些工作。在这两种情况下,您都希望定义一个数据源协议(或创建绑定),以便从数据模型中表示UML项的对象向NSView提供数据


核心动画也值得考虑,尽管我会从NSView开始,至少对于一个简单的原型来说是这样。

通常会从NSView子类开始,以表示“画布”并处理绘图和鼠标/键盘事件。您可能会在绘图方法中使用NSBezierPath来填充和勾勒形状。根据绘图代码的复杂程度,您可以将所有内容都放在NSView子类中,或者创建一个NSCell子类,以完成NSView的一些工作。在这两种情况下,您都希望定义一个数据源协议(或创建绑定),以便从数据模型中表示UML项的对象向NSView提供数据


核心动画也值得考虑,尽管我会从NSView开始,至少对于一个简单的原型是这样的。

一种方法是:

  • 创建基于文档的应用程序
  • 为最终用户能够在画布中绘制的不同对象设计模型类,所有对象共享一个抽象超类
  • 在CanvasView类中,实现drawRect并让它调用NSDocument子类,或者对于更细粒度的类,调用它的viewcontroller,以获得所有应该按正确顺序绘制的对象,从而绘制它们
  • 对于这些对象中的每一个,从CanvasView的drawRect:实现中调用drawInteriorInView:rect:方法或它们都已实现的类似方法
这种粒度设计的优点是,如果您觉得有必要,可以决定用直接的CoreGraphics调用替换NSBezierPath绘图,而无需完全重新设计应用程序

典型的Cocoa控件,例如tableView,实现了一系列不同的绘图方法,一个用于背景,一个用于网格线等。所有这些方法都从视图的drawRect调用(如果适用)


或者你当然可以看看,它似乎有一个相当实用的实现。特别是查看随附的示例应用程序。

一种方法是:

  • 创建基于文档的应用程序
  • 为最终用户能够在画布中绘制的不同对象设计模型类,所有对象共享一个抽象超类
  • 在CanvasView类中,实现drawRect并让它调用NSDocument子类,或者对于更细粒度的类,调用它的viewcontroller,以获得所有应该按正确顺序绘制的对象,从而绘制它们
  • 对于这些对象中的每一个,从CanvasView的drawRect:实现中调用drawInteriorInView:rect:方法或它们都已实现的类似方法
这种粒度设计的优点是,如果您觉得有必要,可以决定用直接的CoreGraphics调用替换NSBezierPath绘图,而无需完全重新设计应用程序

典型的Cocoa控件,例如tableView,实现了一系列不同的绘图方法,一个用于背景,一个用于网格线等。所有这些方法都从视图的drawRect调用(如果适用)


或者你当然可以看看,它似乎有一个相当实用的实现。特别是查看随附的示例应用程序。

谢谢。这是一个很好的建议。发布问题后,我立即浏览了AppKit示例,找到了草图项目。这是开始学习的好方法。谢谢。这是一个很好的建议。发布问题后,我立即浏览了AppKit示例,找到了草图项目。这是开始学习的好方法。