Retina显示核心图形字体质量

van*_*nce 17 iphone core-animation core-graphics calayer ios

试着理解为什么我用CGContextShowTextAtPoint获得低质量的绘图?见附图: IMG

字母"W"是在CALayer上使用CGContextShowTextAtPoint绘制的,看起来非常像素化.它旁边的按钮是一个标准按钮,按预期看起来很高.我想让文字绘图成为高分辨率.

在此输入图像描述

Bra*_*son 36

默认情况下,您的CALayer不会以Retina显示屏的更高分辨率渲染其Quartz内容.您可以使用以下代码启用此功能:

if ([layer respondsToSelector:@selector(setContentsScale:)])
{
    layer.contentsScale = [[UIScreen mainScreen] scale];
}
Run Code Online (Sandbox Code Playgroud)

这不仅会影响文本渲染,还会影响CALayers中的所有Quartz绘图,因此您需要使用自定义Quartz内容对所有图层执行此操作.

  • @vance - 你是对的.我从错误的地方复制了代码,指的是UIView而不是CALayer(现在已经修复).模糊很可能是由于图层或图形的像素未对齐,或者在渲染文本后应用了变换.确保在图层首次显示内容之前设置contentsScale,或者之后使用`-setNeedsDisplay`.确保图层的原点位于整数像素坐标上.请记住,在使用Quartz绘制图层时,要在半像素坐标上对齐,而不是整数坐标. (3认同)

Mat*_*hop 5

使用CGContextScaleCTM会为您提供任何结果吗?使用图形上下文时,如下所示:

CGFloat scale = [[UIScreen mainScreen] scale];
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextScaleCTM(context, scale, scale);
Run Code Online (Sandbox Code Playgroud)