CATextLayer字体borderColor?

我希望我的文字被白色边框包围。 我正在使用CATextLayer作为文本。 我知道CATextLayer没有属性borderColor / borderWidth。 当然,我可以使用其超类(CALayer)的属性,但它会在图层的框架周围绘制边框,而不是文本本身。 有人知道如何使用CATextLayer实现这一目标吗?

在此处输入图像描述

以防有人对我的解决方案感兴趣:

基本上可以直接使用笔划(边框)创建文本而不使用CoreText。 CATextLayer的字符串属性接受NSAttributedStrings。 因此,它就像给NSAttributedString的属性中的笔触颜色和笔触宽度一样容易。

不幸的是我需要动画字体大小。 string属性是可动画的,但前提是它是NSString。 所以我决定inheritanceCATextLayer。 经过多次尝试后,我意识到CATextLayer的字符串和内容属性是互斥的,这意味着要么显示字符串,要么显示内容。 我无法弄清楚如何自己绘制字符串。 只有在更新内容时才会调用display和drawInContext:ctx方法,但我不知道要更新字符串需要调用什么。

所以我决定编写自己的CATextLayer类,inheritanceCA​​Layer。 我创建了一个名为fontSize的动画属性。 当这个动画时,调用drawInContext:ctx方法。 在drawInContext:ctx方法中,我使用CoreText创建一个新字符串,并使用fontSize属性相应地更新其大小。

对于任何对解决方案感兴趣的人,无需担心动画字体大小:

 @import QuartzCore; @import CoreText; - (void)addTextLayer { NSDictionary* attributes = @{ NSFontAttributeName : [UIFont boldSystemFontOfSize:40.0], (NSString*)kCTForegroundColorAttributeName: (id)[UIColor blackColor].CGColor, (NSString*)kCTStrokeWidthAttributeName: @(-2.0), (NSString*)kCTStrokeColorAttributeName: (id)[UIColor whiteColor].CGColor }; CATextLayer* textLayer = [CATextLayer layer]; textLayer.string = [[NSAttributedString alloc] initWithString:@"Hello World" attributes:attributes]; // Do the rest... }