Когда UIView знает, насколько он велик?

У меня есть подкласс UIView, который рисует изображение с помощью CAShapeLayers. Я хочу, чтобы рисунок адаптировался к любому размеру, который UIView задает AutoLayout. Я дал ему функцию drawGraph(), которая получает свой текущий размер от .bounds.size, а затем рисует картинку, чтобы соответствовать.

Я начал с вызова функции рисования в контейнере UIViewController viewDidLoad(), но на тот момент макет еще не был выполнен, поэтому он имеет те границы, которые были в раскадровке.

Я попытался вызвать его из viewDidLayoutSubviews() контроллера представления, но это тоже не совсем удовлетворительно. Он вызывается дважды: сначала с границами из раскадровки, затем снова с обновленными (правильными) границами. Между ними есть пауза, поэтому рисование и перерисовка видны пользователю.

Как узнать, были ли применены ограничения макета к UIView и готовы ли они дать мне точные размеры?


person Robert    schedule 08.08.2016    source источник
comment
Вы пробовали это в методе viewWillAppear?   -  person Dharmesh Kheni    schedule 08.08.2016


Ответы (2)


Вы должны нарисовать его в drawRect(rect: CGRect) UIView. Как только представление должно отрисовываться на экране, будет вызвана эта функция.

person Lumialxk    schedule 08.08.2016

В моих подклассах UIView я обычно делаю код, связанный с макетом, переопределяя метод layoutSubview(). Если я правильно помню, он легче, чем drawRect(rect: CGRect).

Но если вы действительно делаете только рисование, вам, вероятно, следует делать это в drawRect(rect: CGRect), так как Xcode предлагает вам это при создании нового подкласса UIView.

person Andrej    schedule 08.08.2016