0

我正在尝试创建一个类别来更改在 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。这是一个严重的错误。此应用程序或它使用的库正在使用无效的上下文,从而导致系统稳定性和可靠性的整体下降。此通知是出于礼貌:请解决此问题。这将成为即将到来的更新中的致命错误。

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

4

1 回答 1

0

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

于 2014-02-26T20:56:43.147 回答