Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cocoa 在CGContext中绘制NSAttributed字符串时,文本外观难看_Cocoa_Text_Core Animation_Pyobjc - Fatal编程技术网

Cocoa 在CGContext中绘制NSAttributed字符串时,文本外观难看

Cocoa 在CGContext中绘制NSAttributed字符串时,文本外观难看,cocoa,text,core-animation,pyobjc,Cocoa,Text,Core Animation,Pyobjc,我想在CoreAnimation层中显示字符串,但不幸的是CATextLayer还不够,主要原因是在使用约束时很难使用,并且需要包装文本 我正在使用NSLayoutManager,使用以下代码(PyObjC): 这一切都是好的和有效的,但唯一的问题是它产生了难看的文本(尽管它是反序列化的) 以下是CATextLayer版本: 以下是NSLayoutManager版本: 有什么我遗漏的吗?我之所以回答这个问题,是因为coretext开发人员档案无法搜索,而苹果公司的Aki Inoue刚刚回答了我的

我想在CoreAnimation层中显示字符串,但不幸的是CATextLayer还不够,主要原因是在使用约束时很难使用,并且需要包装文本

我正在使用NSLayoutManager,使用以下代码(PyObjC):

这一切都是好的和有效的,但唯一的问题是它产生了难看的文本(尽管它是反序列化的)

以下是CATextLayer版本:

以下是NSLayoutManager版本:


有什么我遗漏的吗?

我之所以回答这个问题,是因为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)