我希望我的文字被白色边框包围。我正在使用CATextLayer作为文本。我知道CATextLayer没有属性borderColor / borderWidth。当然我可以使用它的超类(CALayer)的属性,但是它会在图层的框架周围绘制边框而不是文本本身。有人知道如何使用CATextLayer实现这一目标吗?
答案 0 :(得分:5)
以防万一有人对我的解决方案感兴趣:
基本上可以直接使用笔划(边框)创建文本而不使用CoreText。 CATextLayer的字符串属性接受NSAttributedStrings。因此,它就像给NSAttributedString一样简单,它的属性中包含笔触颜色和笔触宽度。
不幸的是我需要设置字体大小的动画。 string属性是可动画的,但前提是它是NSString。所以我决定继承CATextLayer。经过多次尝试后,我意识到CATextLayer的字符串和内容属性是互斥的,这意味着要么显示字符串,要么显示内容。我自己无法弄清楚如何绘制字符串。只有在更新内容时才会调用display和drawInContext:ctx方法,但我不知道在更新字符串时我需要调用什么。
所以我决定编写自己的CATextLayer类,继承CALayer。我创建了一个名为fontSize的动画属性。当这个动画时,调用drawInContext:ctx方法。在drawInContext:ctx方法中,我使用CoreText创建一个新字符串,并使用fontSize属性相应地更新其大小。
答案 1 :(得分:3)
对于任何对解决方案感兴趣的人,无需担心动画字体大小:
@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...
}