2

我正在尝试在某些文本上获得外部发光效果,类似于 PhotoShop,例如: 在此处输入图像描述

我尝试同时使用:

    CGContextSetTextDrawingMode(context, kCGTextStroke);        
    CGContextShowTextAtPoint(context, x, y, "M", 1);

和CoreText API绘制具有笔画宽度的属性字符串,(首先绘制最宽的,仅笔画,一直到最终仅填充字符串):

    CTLineRef line = CTLineCreateWithAttributedString((CFAttributedStringRef)CFBridgingRetain(stringToDraw));
    CGContextSetAlpha(context, myAlpha);
    CGContextSetTextPosition(context, x, y);
    CTLineDraw(line, context);

两种解决方案都可以正常工作,直到我尝试以大于某个阈值的笔画宽度绘制它们,然后才开始出现奇怪的伪影。这些图片显示了将绘制模式设置为 kCGTextFillStroke 并具有 alpha 为 0.5 的白色笔触颜色(并增加每个屏幕截图的线宽)的结果:

在此处输入图像描述 在此处输入图像描述 在此处输入图像描述

下面的图片显示了当我使用属性字符串绘制并具有适当的笔划淡化效果时实际发生的情况(增加每个屏幕截图的 strokewidth 属性):

在此处输入图像描述 在此处输入图像描述 在此处输入图像描述

对我来说,这看起来像是笔画算法的错误实现,但也许你们中的一些人会知道得更好,有没有人知道我如何才能在没有奇怪的角字母的情况下获得更宽笔画的效果?

4

2 回答 2

3

尖峰似乎是由 LineCapStyle 引起的。尝试不同的设置

于 2013-05-24T12:42:02.123 回答
0

在这里,我找到了一个与发光文本相关的好演示。因为有很多方法可以做到这一点,技术质量。一种方法是子类化,并在方法UILabel中实现某种渐变效果。作为自定义渐变 UILabel 的另一个很好的例子coregraphicsdrawRect

于 2013-05-24T12:05:08.647 回答