我很困惑,如果将以下代码添加到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,则为圆形)。通过不工作,我的意思是它将保持正方形。
最佳答案
请查看the Apple Docs中的详细描述,但这实际上是因为您在绘制周期的中间设置了图层配置(cornerRadius,shadow等),而在绘制周期开始之前就已经完成了此设置。
从drawRect:文档:
在调用此方法时,UIKit已为您的视图适当配置了绘图环境,您可以简单地调用呈现内容所需的任何绘图方法和函数。
其他功能(例如awakeFromNib:
或initWithFrame:
)在绘制周期之前发生,这意味着您的配置将在屏幕上呈现之前被考虑在内。相比之下,drawRect:
假设这些基本配置已设置,并且仅能呈现在屏幕上指定的内容。
关于ios - CALayer在awakeFromNib vs drawRect中,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30259342/