2011-11-03 82 views
3

我打算编写一个相对简单的应用程序来构建类似数据库的模式。目标是构建一个可用的工具并且练习Cocoa编程。 这个应用程序的主要组成部分将是一个视图,让用户放置可拖动框与可编辑列表里面,然后用线将它们链接起来。我相信你知道我在想什么。如何使用类似QuartzComposer的GUI设计应用程序

它可能看起来有点像这样的事情: QuartzComposer gui example

的问题是我不知道什么是在这种情况下,最好的办法。我应该:

  1. 子类的NSView和编写管理盒,连接渲染huuge视图,负责处理所有的箱子事件等,或...
  2. 写意见,然后使用一些(不知道的我)基础架构来管理并显示出来,或...
  3. 使用的东西,做什么,我想,有人写它已经(无法找到任何东西),或...
  4. 别的东西(??)

1和2肯定是可行的,但我想以正确的方式做到这一点。我认为重新使用盒子里的一些Cocoa控件是很酷的。

我是有经验的程序员,但对Cocoa和Objective-C来说还是一个新手。

你会怎么做?任何提示和想法高度赞赏:)

+0

[我可以用作补丁湾的任何Cocoa控件代码的可能的重复?](http://stackoverflow.com/questions/3071832/any-cocoa-control-code-that-i-can-使用那个行为作为一个补丁湾) –

+0

区别是,我知道没有任何控制作为补丁湾。我不想设计和编码一个:) – nooga

+0

有一个链接问题的答案,包括下载到一个名为“EFLaceView”,这是一个基本的补丁湾。 –

回答

1

每个盒子可能是一个自定义的,子类,NSView。 BoxView也许。 然后,您将拥有包含这些框的视图的视图控制器。 该视图控制器将处理移动框和周围的东西。 这些框将作为子视图添加到视图控制器的视图中。 这就是我会采取的方法。

+0

你如何看待如何在方法(1)中继承NSView并将每个方框表示为CALayer?在那里定期进行控制会很痛苦吗? – nooga

+0

@nooga我不会让每个盒子成为CALayer,主要是因为CALayer不支持用户交互,而且都是纯粹的图形。 – spudwaffle

+0

@spudwaffle父控件将处理交互...但是这将是巨大的,可能是错误的!但是我认为如果使用Randall的方法,绘制连接线会出现问题。 – nooga

1

我读过评论和答案,做了一些研究,想出了这样的设计。看看下面的样机:

my design

它看起来理智?

+0

对我有意义。 – Randall

+0

随着节点数量的增长,我想知道在拖动一个节点时,如何最优化重新绘制连接器(ComposerView.draw(_ :)')的最佳方法。 –

+0

此外,有什么样的算法可以最大限度地减少“连接器混乱”(也许最小化长度?像Interface Builder与segues做的事情可能...?) –

相关问题