这是一个确切地设置和初始化UIView
的边界变量的问题。我在视图中有一个变量ballSize
,它使用视图的bounds变量进行初始化,如下所示:
private var ballSize: CGSize {
let size = bounds.size.width / 20
return CGSize(width: size, height: size)
}
按照预期,一切都很顺利。那么到底是什么时候,UIView
的界限被设定了?假设我可以在UIView
类的变量初始化中使用边界,这是否总是安全的?
答案 0 :(得分:0)
如果您以编程方式使用UIView,那么在调用addSubview
方法之后或者如果您使用来自Xib
的UIVIew然后在-(void)viewDidAppear:(BOOL)animated
中进行初始化时,您将获得正确的边界值。
答案 1 :(得分:0)
这取决于您使用的初始值设定项。假设您使用UIView
呼叫最外面的UIView(CGRect(x,y,width,height))
,那么您可以安全地使用bounds属性asap。如果您没有在init
内传递一个框架,那么它可能尚未用于您的子视图。
答案 2 :(得分:0)
似乎不允许在UIView
类的变量初始化中使用'bounds',因为这相当于'self.bounds'。事实上,我得到一个“不能在属性初始化程序中使用实例成员'边界';属性初始化程序在'self'可用之前运行”错误,如果我尝试这样做:
private var ballSize = CGSize(width: bounds.size.width/20, height: bounds.size.height/20)
出于某种原因,问题中的上述代码可以访问'self.bounds',因为该变量是一个计算属性。