2011-03-24 19 views
17

¿Tratando de entender por qué obtengo un dibujo de baja calidad con CGContextShowTextAtPoint? Ver imagen adjunta: imgCalidad de fuente de los gráficos del núcleo de la pantalla Retina

La letra "W" se dibuja usando CGContextShowTextAtPoint en un CALayer y se ve muy pixelizada. El botón al lado es un botón estándar y se ve con alta resolución como se esperaba. Me gustaría que el dibujo de texto sea de alta resolución.

enter image description here

Respuesta

36

Por defecto, su CALayer no está prestando su contenido de cuarzo en la mayor resolución de la pantalla de visualización de la retina. Puede activar el código utilizando el siguiente aspecto: no

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

Esto afectará solo renderizado de texto, pero la totalidad de su dibujo de cuarzo dentro CALayers, por lo que tendrá que hacer esto para todas sus capas con la costumbre de cuarzo contenido.

+0

no veo contentScaleFactor en CALayer – vance

+0

Gracias, es contentsScale en un CALayer: escala CGFloat = [[UIScreen mainScreen] escala]; self.contentsScale = scale; – vance

+0

En realidad, establecer el contenidoScale hace que la imagen se vea * muy * borrosa. Ver segundos de imagen adjunta. – vance

5

¿El uso CGContextScaleCTM entregas ningún resultado para usted? Cuando se trabaja con un contexto gráfico, algo como esto:

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

Un grupo de funciones controla la forma en núcleo de gráficos representa las fuentes:

  • CGContextSetAllowsAntialiasing
  • CGContextSetAllowsFontSmoothing
  • CGContextSetAllowsFontSubpixelPositioning
  • CGContextSetAllowsFontSubpixelQuantization
0

versión Swift:

textLayer.contentsScale = UIScreen.mainScreen().scale 

enter image description here

Cuestiones relacionadas