iPhone: изменение размера в drawRect: - PullRequest
1 голос
/ 26 сентября 2010

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

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

[self performSelector:@selector(setupControl)withObject:self afterDelay:0];
return;

В нижней части setupControl: затем я делаю:

[self setNeedsDisplay];
self.hidden = NO;

Я также переопределил конструкторы initWithFrame: и initWithDecoder: так, чтобы они устанавливали скрытый UIView для запуска до тех пор, пока не будет выполнен код установки.Идея состоит в том, чтобы устранить любые «вспышки» на дисплее при изменении размеров элемента управления.

Как я уже сказал, это работает нормально, элементы управления можно нарисовать в любом размере - это файл xib, а затем установить во время выполнения правильный размер.

Мой вопрос заключается в том, является ли этот метод постановки в очередь селектора, выход из drawRect: а затем с помощью setNeedsDisplay, является единственным способом сделать это?O есть какой-то метод, который я не нашел, который я могу переопределить?или что-то еще?

1 Ответ

3 голосов
/ 27 сентября 2010

Что вы, вероятно, хотите переопределить, это layoutSubviews , а не drawRect, когда вы изменяете макет, не реализуя пользовательский чертеж.

Возможно, вам также придется использовать пользовательский установщик длясвойства, которые изменяют размер представления и вызывают [self setNeedsLayout] в установщике, чтобы убедиться, что ваш метод layoutSubviews вызывается до вычисления размера представления.

...