如何获得适当的,任意宽度的文本笔划?

时间:2013-05-24 12:01:58

标签: ios drawing core-graphics cgcontext core-text

我试图在某些文本上获得外部发光效果,类似于PhotoShop,例如: enter image description here

我尝试过使用两者:

    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的白色笔触颜色(并且增加每个屏幕截图的线宽)的结果:

enter image description here enter image description here enter image description here

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

enter image description here enter image description here enter image description here

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

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:0)

在这里,我找到一个与Glowing Text.相关的好演示。有许多方法可以做到这一点,技术质量很多。一种方法是子类UILabel,并在coregraphics方法的drawRect中实现某种渐变效果。作为另一个good example of Custom gradient UILabel