какао - получение вложенных NSViews и CALayers для пропорционального изменения размера - PullRequest
3 голосов
/ 09 января 2011

Мой contentView NSWindow является подклассом NSView. У этого есть некоторые другие подклассы NSView как подвиды. Подвиды основаны на слоях, и эти слои в свою очередь содержат подслои. Некоторые из подслоев имеют дополнительные подслои.

Я хочу, чтобы весь размер изменялся пропорционально при изменении размера окна. Как правильно его настроить, чтобы это произошло?

Спасибо

РЕДАКТИРОВАТЬ: я вообще не использую Interface Builder.

1 Ответ

1 голос
/ 10 января 2011

Вот что я сделал, чтобы пропорционально масштабировать содержимое NSView при изменении размера родительского окна.Сначала в конструкторе интерфейсов я добавил свой NSView в окно, а затем добавил ссылку на него в моем AppDelegate.Мой, случается, называется scrollView.Я удалил все функции автоматического изменения размера из scrollView.

Затем в свой AppDelegate я добавил это:

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
    // keep the aspect ratio constant so that the content looks good
    [window setContentAspectRatio:NSMakeSize(2, 1)];
    window.delegate = self;
}

- (void)windowDidResize:(NSNotification *)notification {
    // size the scrollView to fill the window, but keep its bounds constant
    NSRect rect = [[window contentView] frame];
    NSRect oldBounds = [scrollView bounds];
    [scrollView setFrame:rect];
    [scrollView setBounds:oldBounds];
}

Это также превращает AppDelegate в делегат окна.Хорошо, так как у меня не так много логики.Сохраняя границы постоянными при смене кадра, содержимое scrollView будет плавно уменьшено.

...