更改现有NSAttributedString的颜色

时间:2014-01-27 01:21:30

标签: ios nsattributedstring catextlayer

我正在尝试创建一个类别来更改在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

字符串显示颜色的EXCEPT属性。然后我得到了一大堆错误:

CGContextSetFillColorWithColor:无效的上下文0x0。这是一个严重的错误。该应用程序或其使用的库正在使用无效的上下文,从而导致系统稳定性和可靠性的整体降低。此通知是礼貌的:请解决此问题。在即将到来的更新中,它将成为一个致命的错误。

为什么它不起作用的任何想法?

1 个答案:

答案 0 :(得分:0)

据我所知,这是CATextLayer的错误,而不是我的代码。它适用于UILabels中显示的文本,而不是CATextLayers。