我有一个带有子层(CAShapeLayer)和子视图(UILabel)的自定义视图。当我在其中创建图层initWithCoder
并设置背景颜色时,它总是显示为黑色。但是,如果我将代码移入initWithFrame
,则颜色会成功显示。
我们不应该在 中创建子层initWithCoder
吗?
这是我可以让我的代码工作的唯一方法:
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
self.colorLayer = [CAShapeLayer layer];
self.colorLayer.opacity = 1.0;
[self.layer addSublayer:self.colorLayer];
}
return self;
}
- (id)initWithCoder:(NSCoder *)aDecoder {
self = [super initWithCoder:aDecoder];
if (self) {
self.textLabel = [[UILabel alloc] initWithFrame:self.bounds];
self.textLabel.font = [UIFont primaryBoldFontWithSize:12];
self.textLabel.textColor = [UIColor whiteColor];
self.textLabel.textAlignment = NSTextAlignmentCenter;
self.textLabel.backgroundColor = [UIColor clearColor];
[self addSubview:self.textLabel];
}
return self;
}
- (void)drawRect:(CGRect)rect {
//Custom drawing of sublayer
}
更新:
原来我drawRect
的填充颜色设置错误。我应该使用colorLayer.fillColor = myColor.CGColor
而不是[myColor setFill]
那时[path fill]