在UIView中初始化变量,假设已设置边界

时间:2017-02-17 06:03:04

标签: swift uiview core-graphics

这是一个确切地设置和初始化UIView的边界变量的问题。我在视图中有一个变量ballSize,它使用视图的bounds变量进行初始化,如下所示:

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

按照预期,一切都很顺利。那么到底是什么时候,UIView的界限被设定了?假设我可以在UIView类的变量初始化中使用边界,这是否总是安全的?

3 个答案:

答案 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',因为该变量是一个计算属性。