2017-02-17 4 views
0

Это вопрос точно, когда переменная границей установлена ​​и инициализирована. У меня есть переменная ballSize, на мой взгляд, который инициализируется с помощью ограничивающей переменную зрения следующим образом:Инициализация переменной в границах UIView, предполагающих границы, была установлена ​​

private var ballSize: CGSize { 
     let size = bounds.size.width/20 
     return CGSize(width: size, height: size) 
} 

Все прекрасно работает, как задумано. Итак, когда это точно, что установлены границы UIView? И всегда ли безопасно предполагать, что я могу использовать границы при инициализации переменной в классе UIView?

ответ

0

Если вы используете UIView программно, то вы получите правильное значение границ после addSubview метода, называемого или если вы используете UIView из Xib затем выполните инициализацию в -(void)viewDidAppear:(BOOL)animated.

+0

Мой вопрос в том, что границы 'UIView' установлены в инициализации перед другими переменными, которые я определяю в классе' UIView', так что я могу использовать его при инициализации переменных, как указано выше? – scozzle

0

Это зависит от того, какой инициализатор вы используете. Предполагая, что вы вызываете ваш внешний UIView с помощью UIView(CGRect(x,y,width,height)), вы можете без проблем использовать свойство bounds asap. Если вы не передаете фрейм внутри init, он может быть недоступен для ваших подзонов.

0

Похоже, что использование «границ» при инициализации переменной в классе UIView недопустимо, так как это эквивалентно «self.bounds». На самом деле, я получаю «Не удается использовать экземпляр элемент„границы“в свойстве инициализаторе; Инициализаторы собственности управляют, прежде чем„я“доступна» ошибка при попытке сделать это:

private var ballSize = CGSize(width: bounds.size.width/20, height: bounds.size.height/20)

По какой-то причине, выше код в вопросе работает с доступом к «self.bounds», потому что переменная является вычисленным свойством.

Смежные вопросы