视网膜显示核心graphics的字体质量

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

字母“W”是在CALayer上使用CGContextShowTextAtPoint绘制的,看起来非常像素化。 它旁边的button是一个标准的button,看起来像预期的高分辨率。 我想要得到的文字是高分辨率的。

在这里输入图像说明

默认情况下,您的CALayer不会以Retina显示屏的更高分辨率渲染Quartz内容。 您可以使用如下所示的代码启用它:

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

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

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

 CGFloat scale = [[UIScreen mainScreen] scale]; CGContextRef context = UIGraphicsGetCurrentContext(); CGContextScaleCTM(context, scale, scale); 

一组函数控制Core Graphics如何呈现字体:

  • CGContextSetAllowsAntialiasing
  • CGContextSetAllowsFontSmoothing
  • CGContextSetAllowsFontSubpixelPositioning
  • CGContextSetAllowsFontSubpixelQuantization

Swift版本:

 textLayer.contentsScale = UIScreen.mainScreen().scale 

在这里输入图像说明