我正在尝试创建一个类别来更改在 CATextLayer 中呈现的现有 NSAttributedString 的颜色。这是类别实现
@implementation NSAttributedString (_additions)
-(NSAttributedString*)attributedStringWithColor:(UIColor*)color{
NSMutableAttributedString* mutableSelf = [self mutableCopy];
[mutableSelf addAttribute:NSForegroundColorAttributeName value:color range:NSMakeRange(0, mutableSelf.length)];
return [mutableSelf attributedSubstringFromRange:NSMakeRange(0, mutableSelf.length)];
}
@end
CATextLayer 是 CAShapeLayer 的子类。我还应该提到 CATextLayer 确实使用正确的属性进行渲染,除了颜色。
// in .m
// class continuation:
@interface ONCShapeLayerSubclass()
{
CATextLayer* textLayer;
}
@end
@implementation
//...
-(void)update{
// method that initializes the catextlayer
//...
if(!textLayer){
textLayer = [CATextLayer layer];
textLayer.alignmentMode = kCAAlignmentCenter;
textLayer.frame = self.bounds;
textLayer.foregroundColor = [kDefaultLineColor CGColor];
[self addSublayer:textLayer];
}
textLayer.string = //// a method that returns an attributed string from a database
//...
[self updateColor];
}
-(void)updateColor{
if(textLayer)textLayer.string = [textLayer.string attributedStringWithColor:kDefaultLineColor];
}
@end
该字符串显示属性除了颜色。然后我得到一大堆错误:
CGContextSetFillColorWithColor:无效的上下文 0x0。这是一个严重的错误。此应用程序或它使用的库正在使用无效的上下文,从而导致系统稳定性和可靠性的整体下降。此通知是出于礼貌:请解决此问题。这将成为即将到来的更新中的致命错误。
任何想法为什么它不起作用?