У меня есть пользовательский вид с подслоем (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]