Как я могу получить размеры NSView во время инициализации? - PullRequest
0 голосов
/ 21 октября 2011

У меня есть пользовательское представление (подкласс NSView), и я хотел бы сохранить некоторые данные, основанные на измерениях (ширина / высота) представления, когда создается представление, то есть до вызова drawRect.

Я ожидаю, что смогу использовать initWithFrame и взять границы от переданного NSRect, но если я проверю данные в отладчике, я просто получу экземпляр NSRect с (x=0, y=0), (width=0, height=0) , Предположительно, он еще не инициализирован?

Еще более озадачивает то, что, если я записываю ширину кадра на консоль, я получаю значение дважды:

- (id)initWithFrame:(NSRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        CGFloat width = frame.size.width;
        NSLog(@"width: %f", width);
    }
}

Этот код журналов:

21/10/2011 09:40:55.733 Test App: width: 480.000000
21/10/2011 09:40:55.818 Test App: width: 0.000000

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

ОБНОВЛЕНИЕ [решено]: Эта проблема теперь решена. Оказывается, у меня было два экземпляра моего NSView подкласса в Интерфейсном Разработчике. Один был нарисован как Custom View, а другой был Object на боковой панели. Я не осознавал, что добавление объекта на боковую панель вызывало его создание во время выполнения. Удалил объект и мой код теперь работает.

1 Ответ

0 голосов
/ 21 октября 2011

Кадр, переданный в initWithFrame, является кадром, используемым представлением. Вы уверены, что не создаете два представления или не вызываете его дважды?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...