我正在尝试在某些文本上获得外部发光效果,类似于 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 属性):
对我来说,这看起来像是笔画算法的错误实现,但也许你们中的一些人会知道得更好,有没有人知道我如何才能在没有奇怪的角字母的情况下获得更宽笔画的效果?