Уведомление об изменении панели сплиттера NSSplitView - PullRequest
2 голосов
/ 21 декабря 2009

Здравствуйте, мне нужно реализовать четыре сплиттера представлений, как в Maya, 3ds max, Blender или других подобных инструментах моделирования. Я использую NSSplitView на стороне моего редактора для Mac, и мне нужно знать, когда пользователь перетаскивает одну панель для синхронизации другой панели. Есть ли способ получить новый размер из одного NSSplitView и синхронизировать с ним другое представление? У меня есть рабочий код для Windows Forms в C # версии этого редактора, но я не могу понять, как это сделать на Mac. Полный исходный код: http://github.com/filipkunc/opengl-editor-cocoa.

Большое спасибо.

1 Ответ

4 голосов
/ 26 декабря 2009

Я исправил это с помощью этого кода:

- (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]];
        }
    }
}
...