2

我正在尝试为一种头脑风暴应用程序创建一个视图,例如 OmniGraffle,其元素包含文本视图并且可以拖动。(另外,应该可以用箭头连接,但这不是(还)问题)

我做了功课,通过谷歌搜索并阅读有关可可的书籍,但似乎没有类似的例子。由于我也是可可的新手,所以我在这里有点无奈。

我可以肯定的是,我需要一个自定义视图,我可以在其中创建我的元素 - 到目前为止我尝试这样做的是:

  • 首先,我搜索了将子窗口添加到窗口以创建我的元素的语法。我想象,子窗口会自动移动并出现在前面等等。
    问题:你们这些有经验的 Cocoa 程序员可能并不感到惊讶,我惊呆了,没有发现任何类似的东西 - 这似乎是一些东西,只是 Cocoa 不打算这样做?!

  • 然后我考虑创建子视图,其中包含标题栏绘图的自定义视图(用户可以单击以拖动元素)和NSTextView.
    问题:

    • 我读到,在一个窗口中创建数十个子视图并不是那么聪明,因为这会非常慢(或者在这种情况下不会那么糟糕,因为所有子视图都是同一个类的实例?)。
    • 此外,我不知道如何从 nib 或 xib 文件加载子视图。我需要一个视图控制器吗?或者这会使数十个实例的问题变得更糟?
    • 苹果告诉你不要重叠子视图(好吧,这不是那么重要,但我真的很想知道 OmniGroup 的人是如何制作 OmniGraffle 的......)

  • 正因为如此,我现在想在周围的自定义视图中绘制标题栏并以编程方式创建文本视图(据我所知,文本“视图”并不是真正的视图,而是从 NSCell 获取其功能以减少所有意见的努力?)。
    问题:

    • 即使这样也失败了,因为我无法创建一个不能填充整个窗口的文本视图(initWithFrame:只是[[NSScrollView alloc] initWithFrame: aRect] 似乎被忽略了,还是我弄错了?)。
    • 此外,最终应用程序中的每个元素上都应该有一些按钮。我想用每个元素的 nib 文件中的子视图来完成会更容易吗?

好吧,现在没有任何效果,而且我阅读的越多,似乎出现的问题就越多,我很困惑和沮丧。
我怎么能实现这样的程序?有人可以把我推向正确的方向吗?

4

1 回答 1

1

我为可拖动元素创建了一个类,我将位置、大小和文本保存在实例变量中。在我看来,每个新元素实例都被添加到一个数组中(目前,这在没有控制器的情况下工作)。该数组用于绘制循环中的所有元素drawRect:。对于元素的文本,我只使用一个 NSTextFieldCell ,它设置为同一循环中每个元素的已保存文本。

这样,也可以重叠元素。

于 2010-08-21T22:24:17.343 回答