在awakeFromNib和drawRect中的CALayer

时间:2015-05-15 12:15:50

标签: ios objective-c uibutton calayer

我非常困惑,如果将以下代码添加到awakeFromNibinitWithFrame:,为什么以下代码有效,但如果我将其添加到drawRect:则无效或直接调用它?

self.layer.cornerRadius = CGRectGetWidth(self.bounds) / 2.0f;
self.layer.shadowColor = [UIColor blackColor].CGColor;
self.layer.shadowRadius = 3;
self.layer.shadowOffset = CGSizeMake(0.0f, 0.0f);
self.layer.shadowOpacity = 0.75f;

对于以编程方式创建的按钮,我应该在哪里添加此方法?该按钮可能仅使用init创建,之后通过约束更改大小。

规格:通过工作,我的意思是按钮将呈圆角(如果纵横比为1:1则为圆形)并带有投影。如果不工作,我的意思是它仍然是一个正方形。

1 个答案:

答案 0 :(得分:1)

查看the Apple Docs中的详细说明,但基本上是因为您在绘制周期的中间设置了图层配置(cornerRadius,阴影等)在抽奖周期开始之前完成了这项工作。

来自drawRect:文档:

  

当调用此方法时,UIKit已经为您的视图正确配置了绘图环境,您可以简单地调用渲染内容所需的任何绘图方法和函数。

其他功能,如awakeFromNib:initWithFrame:在绘制周期之前发生,这意味着您的配置会在屏幕上呈现之前被考虑在内。相比之下,drawRect:假设已经设置了这些基本配置,并且只是用于渲染您在屏幕上指定的内容。