我有两个窗口,每个窗口都有一个圆NSView
:
------------------ ------------
|X-+ Oscillator | |X-+ Mixer |
|----------------| |----------|
| | | |
| O | | O |
| | | |
| | | |
------------------ ------------
两个窗口都是单独的NIB。我希望能够在运行时使用drag'n'drop在两轮NSView
之间绘制一条线,就像在Interface Builder中连接IBOutlets一样:
------------------ ------------
|X-+ Oscillator | |X-+ Mixer |
|----------------| |----------|
| | | |
| O-------+-----+-----O |
| | | |
| | | |
------------------ ------------
我还希望能够使用绘制的线确定NSView
与NSView
的连接。我需要这个将振荡器连接到混音器。我还希望能够通过拖入空白区域来删除连接。
谁能解释我怎么做?感谢。
答案 0 :(得分:2)
问题是你可以绘制一个视图,它可以跨越两个窗口的组合部分(或者它们所在的屏幕或屏幕)。这通常使用无边框,透明的“叠加窗口”来完成。网上有很多无边框透明窗口的例子。
在拖动开始时,会在绘图区域上方显示覆盖窗口(但对用户不可见)。随着拖动的更新,您可以绘制线条,将叠加视图坐标转换为源/目标视图坐标。拖动完成后,执行一些动画(如淡入淡出或闪烁),然后排序叠加窗口。
答案 1 :(得分:0)
我认为你的方法最大的问题是你有两个独立的窗口,一个是振荡器视图,一个是混音器。如果您可以在单个窗口中更改设计以显示所有合成器组件(或者可能是射频组件 - 不确定您正在做什么!),那么您的问题将变得更加简单。 / p>
正如约书亚所说,一种方法是使用一个不可见的叠加窗口,它只显示链接。但如果你真的使用两个单独的窗口,那么你不能(正如约书亚建议的那样)在拖动结束时订购叠加窗口。如果这样做,链接将在拖动结束时消失。如果您希望继续显示链接(想想Interface Builder或者 - 更好 - Quartz Composer),那么您需要一些机制来持久显示链接。如果您希望稍后允许用户删除链接,则尤其如此。
我强烈建议您在一个窗口周围构建界面。另外,请考虑使用Core Animation将每个链接显示为图层。
戴夫