2017-02-17 44 views
0

這是一個關於UIView的邊界變量被設置和初始化的確切時間的問題。在假設邊界已被設置的情況下初始化UIView中的變量

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

一切都工作得很好,像預期一樣:我在我的觀點,即使用視圖的邊界變量如下初始化具有可變ballSize。那麼究竟是什麼時候,UIView的邊界是設置的?假設我可以在UIView類的初始化變量中使用邊界,總是安全的嗎?

回答

0

如果您正在使用的UIView編程,那麼你將後稱爲addSubview方法得到界限正確的值,或者如果你正在使用的UIView從Xib然後做你的初始化中-(void)viewDidAppear:(BOOL)animated

+0

我的問題是,是否在UIView類中定義的其他變量之前的初始化中設置了'UIView'邊界,以便我可以在變量的初始化中使用它? – scozzle

0

這取決於您正在使用的初始化程序。假設你使用UIView(CGRect(x,y,width,height))打電話給你最外面的UIView,那麼你可以安全地使用邊界屬性asap。如果您沒有在init內傳遞幀,那麼它可能無法用於您的子視圖。

0

似乎在UIView類中的變量的初始化中使用'bounds'是不允許的,因爲這相當於'self.bounds'。事實上,我得到一個「不能使用實例成員屬性初始化中‘界限’;屬性初始化之前的‘自我’運行可用」的錯誤,如果我嘗試這樣做:

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

出於某種原因,上述問題中的代碼可以訪問'self.bounds',因爲變量是一個計算屬性。

相關問題