NSSplitView 拆分器窗格更改通知

发布于 2024-08-15 11:39:31 字数 372 浏览 9 评论 0原文

您好,我需要实现四个视图分割器,例如 Maya、3ds max、Blender 或其他类似的建模工具。我在编辑器的 Mac 端使用 NSSplitView,我需要知道用户何时拖动一个窗格来同步另一个窗格。
有没有办法从一个 NSSplitView 获取新大小并将另一个视图同步到它?我在该编辑器的 C# 版本中有适用于 Windows 窗体的工作代码,但我不知道如何在 Mac 上执行此操作。完整源代码位于 http://github.com/filipkunc/opengl-editor-cocoa。

多谢。

Hello I need to implement four views splitters like in Maya, 3ds max, Blender or other similar modeling tools. I use NSSplitView on Mac side of my editor and I need to know when user drags one pane to sync another pane.
Is there any way to get new size from one NSSplitView and sync another view to it? I have working code for Windows Forms in C# version of this editor, but I can't figure out how to do it on a Mac. Full source code is at http://github.com/filipkunc/opengl-editor-cocoa.

Thanks a lot.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

真心难拥有 2024-08-22 11:39:31

我用这段代码修复了它:

- (void)splitViewDidResizeSubviews:(NSNotification *)notification
{
    NSSplitView *splitView = (NSSplitView *)[notification object];
    NSView *topSubview0 = (NSView *)[[topSplit subviews] objectAtIndex:0];
    NSView *topSubview1 = (NSView *)[[topSplit subviews] objectAtIndex:1];

    NSView *bottomSubview0 = (NSView *)[[bottomSplit subviews] objectAtIndex:0];
    NSView *bottomSubview1 = (NSView *)[[bottomSplit subviews] objectAtIndex:1];

    if (fabsf([bottomSubview0 frame].size.width - [topSubview0 frame].size.width) >= 1.0f)
    {
        if (splitView == topSplit)
        {
            NSLog(@"topSplit");
            [bottomSubview0 setFrame:[topSubview0 frame]];
            [bottomSubview1 setFrame:[topSubview1 frame]];
        }
        else
        {
            NSLog(@"bottomSplit");
            [topSubview0 setFrame:[bottomSubview0 frame]];
            [topSubview1 setFrame:[bottomSubview1 frame]];
        }
    }
}

I fixed it with this code:

- (void)splitViewDidResizeSubviews:(NSNotification *)notification
{
    NSSplitView *splitView = (NSSplitView *)[notification object];
    NSView *topSubview0 = (NSView *)[[topSplit subviews] objectAtIndex:0];
    NSView *topSubview1 = (NSView *)[[topSplit subviews] objectAtIndex:1];

    NSView *bottomSubview0 = (NSView *)[[bottomSplit subviews] objectAtIndex:0];
    NSView *bottomSubview1 = (NSView *)[[bottomSplit subviews] objectAtIndex:1];

    if (fabsf([bottomSubview0 frame].size.width - [topSubview0 frame].size.width) >= 1.0f)
    {
        if (splitView == topSplit)
        {
            NSLog(@"topSplit");
            [bottomSubview0 setFrame:[topSubview0 frame]];
            [bottomSubview1 setFrame:[topSubview1 frame]];
        }
        else
        {
            NSLog(@"bottomSplit");
            [topSubview0 setFrame:[bottomSubview0 frame]];
            [topSubview1 setFrame:[bottomSubview1 frame]];
        }
    }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文