我很困惑,如果将以下代码添加到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,则为圆形)。通过不工作,我的意思是它将保持正方形。

最佳答案

请查看the Apple Docs中的详细描述,但这实际上是因为您在绘制周期的中间设置了图层配置(cornerRadius,shadow等),而在绘制周期开始之前就已经完成了此设置。

从drawRect:文档:

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

其他功能(例如awakeFromNib:initWithFrame:)在绘制周期之前发生,这意味着您的配置将在屏幕上呈现之前被考虑在内。相比之下,drawRect:假设这些基本配置已设置,并且仅能呈现在屏幕上指定的内容。

关于ios - CALayer在awakeFromNib vs drawRect中,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30259342/

10-09 19:50
查看更多