Cocoa 在CGContext中绘制NSAttributed字符串时,文本外观难看
我想在CoreAnimation层中显示字符串,但不幸的是CATextLayer还不够,主要原因是在使用约束时很难使用,并且需要包装文本 我正在使用NSLayoutManager,使用以下代码(PyObjC): 这一切都是好的和有效的,但唯一的问题是它产生了难看的文本(尽管它是反序列化的) 以下是CATextLayer版本: 以下是NSLayoutManager版本:Cocoa 在CGContext中绘制NSAttributed字符串时,文本外观难看,cocoa,text,core-animation,pyobjc,Cocoa,Text,Core Animation,Pyobjc,我想在CoreAnimation层中显示字符串,但不幸的是CATextLayer还不够,主要原因是在使用约束时很难使用,并且需要包装文本 我正在使用NSLayoutManager,使用以下代码(PyObjC): 这一切都是好的和有效的,但唯一的问题是它产生了难看的文本(尽管它是反序列化的) 以下是CATextLayer版本: 以下是NSLayoutManager版本: 有什么我遗漏的吗?我之所以回答这个问题,是因为coretext开发人员档案无法搜索,而苹果公司的Aki Inoue刚刚回答了我的
有什么我遗漏的吗?我之所以回答这个问题,是因为coretext开发人员档案无法搜索,而苹果公司的Aki Inoue刚刚回答了我的问题: 因为CALayer不能表示亚像素颜色(也称为字体平滑),所以需要禁用它。 我相信CATextLayer默认会这样做 不要使用CGContextSetShouldSmoothFonts(上下文,false) 谢谢你,阿奇 Milen Dzhumerov的另一评论: 我不相信这是准确的。我们正在使用亚像素消除混叠将文本绘制到CALayers中。在绘制文本之前,只需确保已在文本后面绘制。有关参考资料,请参阅 米伦是正确的,如果您事先知道背景颜色,您可以:
CGContextSetRGBFillColor(ctx, r, g, b, a)
CGContextFillRect(ctx, (topLeft, size))
CGContextSetShouldSmoothFonts(ctx, True)
你会得到相当的亚像素抗锯齿文本。但是,如果您不知道背景颜色,则需要关闭字体平滑功能,否则会得到混乱的结果。透明层如何?你应该用平滑字体吗?
CGContextSetRGBFillColor(ctx, r, g, b, a)
CGContextFillRect(ctx, (topLeft, size))
CGContextSetShouldSmoothFonts(ctx, True)