получить размер nswindow

Есть ли способ получить размер NSWindow (в пикселях) и отобразить его? Поэтому, когда человек изменит размер окна, текст изменится и отобразит новый размер.


person Matt S.    schedule 03.09.2009    source источник


Ответы (4)


Если вы реализуете метод

- (NSSize)windowWillResize:(NSWindow *)sender toSize:(NSSize)frameSize

для объекта, который вы установили в качестве делегата окна, он будет вызываться всякий раз, когда окно меняет размер. Оттуда вы можете обновить текстовое поле, которое вы используете для отображения размера.

person Ken    schedule 03.09.2009
comment
Хорошо, вот что у меня есть: -(NSSize)windowWillResize:(NSWindow*)sendertoSize:(NSSize)frameSize { [length setStringValue:@thisworks]; [ширина setStringValue:@test]; возвращение; } (строки - это тесты для проверки работоспособности) В ИБ все правильно подключено, все сохранено. Но когда я запускаю приложение, оно просто показывает метку, а не то, что я сказал. - person Matt S.; 03.09.2009
comment
Является ли приведенный выше код делегатом? Можете ли вы обновить свой вопрос с кодом, который у вас есть, чтобы предоставить больше контекста? - person fbrereto; 03.09.2009
comment
Мэтт: Ты не забыл подключить эти length и width розетки в IB? Если они не установлены, вы отправляете сообщение nil, которое ничего не делает. - person Peter Hosey; 04.09.2009
comment
да, все подключено правильно. Я попытался установить текст с помощью awakeFromNib, и это сработало, но -(NSSize) не работает. Как именно я должен их установить? - person Matt S.; 04.09.2009
comment
Этот код выглядит правильно, за одним исключением: обратите внимание, что возвращаемый тип метода не void. Вы должны вернуть значение. В частности, вы должны вернуть размер, до которого вы хотите изменить размер окна. Предполагая, что вам на самом деле не нужен какой-либо конкретный размер или каким-либо образом ограничивать размер, просто верните предложенный размер. - person Peter Hosey; 04.09.2009
comment
Убедитесь, что ваш объект действительно установлен как делегат окна (что вы бы сделали в IB). Обратите внимание, что приложение — это не окно; это распространенная ошибка. Кроме того, если вы ориентируетесь на 10.6, вам может потребоваться объявить класс делегата как соответствующий протоколу NSWindowDelegate; Я знаю, что вы получите предупреждение, если попытаетесь установить его в коде без этого, но я не знаю, пытается ли NSWindow обеспечить это соответствие, если вы строите версию 10.6. - person Peter Hosey; 04.09.2009
comment
хорошо, я настроил его сейчас, однако я не думаю, что он вызывает windowWillResize, у меня там настроен NSLog, и он не помещает его в консоль, когда я изменяю размер окна - person Matt S.; 04.09.2009

Как насчет:

CGSize window_size = my_window.frame.size;
person fbrereto    schedule 03.09.2009

NSSize myNSWindowSize = [ [ myNSWindow contentView ] frame ].size;

... должно быть то, что вы ищете. Предложение fbrereto — это то, что вам следует использовать, если вы хотите, чтобы размер включал строку заголовка NSWindow.

person Ted Middleton    schedule 15.12.2009
comment
В качестве альтернативы можно получить frame окна, а затем отправить окну сообщение contentRectForFrameRect:, чтобы преобразовать его. - person Peter Hosey; 15.12.2009

Вместо того, чтобы пытаться обрабатывать изменения размеров, вы должны убедиться, что маски автоматического изменения размера ваших представлений установлены правильно. В Interface Builder вы делаете это в инспекторе размера (⌘3) с выбранными представлениями.

Если вы выложили всю иерархию представлений без установки их масок автоматического изменения размера, вам предстоит немного утомительной работы, но это несложно (просто утомительно) и не займет много времени. Вот почему вы должны устанавливать маски автоматического изменения размеров представлений при их создании.

После установки масок автоизменения размер представлений изменится автоматически; если ваш интерфейс не очень сложен или какие-либо представления не могут уменьшиться до нуля, вам не нужно вмешиваться.

person Peter Hosey    schedule 03.09.2009
comment
как это позволит мне отображать размер с помощью NSTextField? - person Matt S.; 03.09.2009
comment
О, я думал, вы просите получить размер и изменить размер ваших просмотров с его помощью. Прости. Я поддерживаю ответ Кена. - person Peter Hosey; 03.09.2009