如何获得一个适当的,任意宽的文本描边?

我试图在某些文本上获得外部发光效果,类似于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属性)时实际发生的情况:

在这里输入图像描述在这里输入图像描述在这里输入图像描述

它看起来像是一个错误的笔画算法实现给我,但也许你们中的一些人会更好地知道,有没有人有任何想法,我可以得到这种效果更广泛的笔画,没有奇怪的角字母?


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


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

链接地址: http://www.djcxy.com/p/81987.html

上一篇: How to get a proper, arbitrarily wide, text stroke?

下一篇: Multi page PDF with CoreText