objective-c - 就像在 Interface Builder 中一样在窗口之间画线

标签 objective-c cocoa drag-and-drop drawing line

我有两个窗口,每个窗口都有一个圆形的 NSView:

------------------     ------------
|X-+ Oscillator  |     |X-+ Mixer |
|----------------|     |----------|
|                |     |          |
|        O       |     |     O    |
|                |     |          |
|                |     |          |
------------------     ------------

两个窗口都在一个单独的 NIB 中。我希望能够在运行时使用拖放在两个圆形 NSView 之间画一条线,就像在 Interface Builder 中连接 IBOutlets 一样:

------------------     ------------
|X-+ Oscillator  |     |X-+ Mixer |
|----------------|     |----------|
|                |     |          |
|        O-------+-----+-----O    |
|                |     |          |
|                |     |          |
------------------     ------------

我还希望能够使用绘制的线确定 NSView 连接到哪个 NSView。我需要这个来将振荡器连接到混音器。我还希望能够通过拖入空白区域来移除连接。

谁能给我解释一下如何做到这一点?谢谢。

最佳答案

问题在于您可以在其中绘制跨越两个窗口的组合矩形(或它们所在的一个或多个屏幕)的 View 。这通常通过无边界、透明的“覆盖窗口”来完成。网上有很多无边框透明窗口的示例。

在拖动开始时,叠加窗口出现(但用户不可见)位于您的绘图区域上方。随着拖动的更新,您绘制线条,将叠加 View 坐标转换为源/目标 View 坐标或从源/目标 View 坐标转换。拖动完成后,做一些动画(如淡入淡出或闪烁),然后命令覆盖窗口。

关于objective-c - 就像在 Interface Builder 中一样在窗口之间画线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3031952/

相关文章:

ios - 在 iOS 中接收推送消息

ios - 使用按钮滚动 uicollectionview - 我如何检查边界?

iphone - 资源路径?不使用分机 (Iphone)

cocoa - 如何在 cocoa 中使用拉伸(stretch)来调整 NSImage 的大小

iphone - 如何从 NSDictionary 访问值

delphi - 处理 TShellListView 后代中的文件放置

iphone - 如何更改 UINavigationBar backButton 项上的文本?

objective-c - 使用 AVFoundation 调整输入音量(在 AVCaptureSession 中)

Android 拖放 getClipData 总是返回 null

javascript - 如何使用 Angular Material DragAndDrop 设置可拖动元素的默认位置?