我非常困惑,如果将以下代码添加到awakeFromNib
或initWithFrame:
,为什么以下代码有效,但如果我将其添加到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则为圆形)并带有投影。如果不工作,我的意思是它仍然是一个正方形。
答案 0 :(得分:1)
查看the Apple Docs中的详细说明,但基本上是因为您在绘制周期的中间设置了图层配置(cornerRadius,阴影等)在抽奖周期开始之前完成了这项工作。
来自drawRect:文档:
当调用此方法时,UIKit已经为您的视图正确配置了绘图环境,您可以简单地调用渲染内容所需的任何绘图方法和函数。
其他功能,如awakeFromNib:
或initWithFrame:
在绘制周期之前发生,这意味着您的配置会在屏幕上呈现之前被考虑在内。相比之下,drawRect:
假设已经设置了这些基本配置,并且只是用于渲染您在屏幕上指定的内容。