Блокировка формата изображения окна NSDocument - PullRequest
2 голосов
/ 02 июня 2011

У меня есть приложение на основе документа, и я пытаюсь заблокировать соотношение сторон окна документа. Содержание документа - это пользовательский вид, в котором я могу легко установить соотношение сторон. Однако, когда я изменяю размер окна, появляется черный фон, который заполняет пространство между видом и окном. Я попытался переопределить aspectRatio окна в моем классе документов, однако, похоже, это не сработало.

- (NSSize)aspectRatio {
    return NSMakeSize(600,480);
}

Я также попытался установить соотношение сторон окна после загрузки пера. Это помогло, когда мое приложение не было основано на документах.

[window setAspectRatio:window.frame.size];

У меня есть еще один кикер ... Предполагая, что я могу заблокировать соотношение сторон окна, я хочу переопределить это, когда пользователь нажимает кнопку Zoom, чтобы перевести приложение в полноэкранный режим. Тогда и только тогда я захочу заполнить пространство между видом и окном.

Я занимаюсь исследованиями довольно давно и просто не могу найти решение.

1 Ответ

1 голос
/ 02 июня 2011

есть черный фон, который заполняет пространство между видом и окном

Разве вы не можете просто установить цвет фона окна?

Я попытался переопределить аспектное соотношение окна в моем классе документов

В вашем подклассе NSDocument? Если переопределение -aspectRatio работает, оно должно быть в подклассе NSWindow. Тем не менее, вы должны использовать -setAspectRatio:.

Я также попытался установить соотношение сторон окна после загрузки пера. Это помогло, когда мое приложение не было основано на документах.

Это работает независимо от того, какое окно принадлежит приложению, основанному на документах или без документов.

Я хочу переопределить это, когда пользователь нажимает кнопку Zoom, чтобы перевести приложение в полноэкранный режим

У вас может быть делегат окна, который реализует –windowShouldZoom:toFrame:, который является частью протокола NSWindowDelegate.

<Ч />

Поскольку OP разрабатывает приложение на основе документов без пользовательского подкласса NSWindow или NSWindowController, реализует:

- (void)windowControllerDidLoadNib:(NSWindowController *)aController
{
    [super windowControllerDidLoadNib:aController];
    [[aController window] setAspectRatio:(NSSize){600,400}];
}

в подклассе NSDocument - единственное изменение, необходимое для установки соотношения сторон в проекте на основе шаблона приложения на основе документов в Xcode.

В общем, я бы не советовал иметь подкласс NSDocument, который отвечает за окна, а также за документы. По моему мнению, лучший дизайн - это иметь подкласс NSDocument только с документами и создавать подкласс NSWindowController, который касается только окон - подумайте функциональная сплоченность или единая ответственность принцип .

...