2009-03-19 8 views
8

Al dibujar cadenas utilizando drawAtPoint :, drawInRect: e incluso al establecer la propiedad de texto de UILabels, el texto a veces puede aparecer ligeramente borroso.drawAtPoint: y drawInRect: texto borroso

Tiendo a utilizar Helvetica en la mayoría de los lugares, y observo que los tamaños de fuente específicos causan cierto nivel de borrosidad, tanto en el simulador como en el dispositivo.

Por ejemplo:

UIFont *labelFont = [UIFont fontWithName:@"Helvetica-Bold" size:12]; 

hará que la etiqueta resultante tenga texto ligeramente borrosa.

UIFont *labelFont = [UIFont fontWithName:@"Helvetica-Bold" size:13]; 

Resultados en texto nítido.

Mi pregunta es ¿por qué ocurre esto? ¿Y solo se trata de seleccionar un tamaño de fuente óptimo para un tipo de letra? Si es así, ¿cuáles son los tamaños de letra óptimos?

ACTUALIZACIÓN: parece que quizás no sea el tamaño de la fuente lo que está causando la visión borrosa. Puede ser que el centro del rect sea un punto fraccionario. Aquí hay un comentario que encontré en los foros de desarrolladores de Apple:

Marca la posición. Es probable en un píxel fraccionario. El centro de cambio debe ser valor entero.

Completé los valores de todos mis puntos, pero todavía hay lugares donde el texto permanece borroso. ¿Alguien ha encontrado este problema antes?

+0

Véase mi respuesta aquí: http://stackoverflow.com/a/16822238/308315 – iwasrobbed

Respuesta

9

Lo he resuelto.

Solo asegúrese de que el punto o rect en el que está dibujando no ocurra en un píxel fraccionario.

I.e. NSLog(@"%@", NSStringFromCGRect(theRect)) para determinar qué punto se dibuja en un píxel fraccionario. Luego llame al round() en ese punto.

+0

la clave del problema es correcta, aunque el redondeo no es la mejor técnica. Muchas rondas pueden cambiar o cambiar el tamaño del marco. El mejor enfoque sería almacenar el cuadro original como una propiedad y luego volver a establecerlo. Eso garantiza que no hay cambios o cambios de tamaño –

2

Disculpe mi ignorancia si esto es incorrecto, no sé nada sobre iPhone o Cocoa.

Si está pidiendo que el texto se centre en la rect, también podría necesitar asegurarse de que el ancho y/o la altura del rect sea un número par.

+0

Gracias. Redondeé todos los puntos y el ancho y alto. También redondeó los puntos para la propiedad del centro. Todavía no hay dados. –

3

Es posible que desee mirar NSIntegralRect(), hace lo que quiere.

+1

NSIntegralRect() es solo Mac, no iOS. – azdev

+1

Tiene razón, por supuesto, use [CGRectIntegral()] (https://developer.apple.com/library/IOs/documentation/GraphicsImaging/Reference/CGGeometry/Reference/reference.html#//apple_ref/c/func/ CGRectIntegral) en su lugar. – EightyEight

0

Según mis experimentos, algunas fuentes no se representan con claridad en ciertos tamaños. p.ej. Helvetica-Bold no representa "." bien a las 16.0f, pero están libres a las 18.0f. (Si observa detenidamente, el píxel superior del "." Está borroso.)

Después de que noté eso, me molestó cada vez que veo ese UIView, ya que se representa dinámicamente.

2

He tenido este problema también, pero mi solución es diferente y puede ayudar a alguien. Mi problema fue borroso de texto después de cambiar el tamaño de un objeto UIView a través de TouchesBegan y CGAffineTransformMakeScale, luego de nuevo a CGAffineTransformIdentity en TouchesEnded.

Intenté tanto el tamaño de texto variable como el redondeo de los puntos centrales x e y, pero ninguno funcionó. ¡La solución para mi problema era usar tamaños iguales para el ancho y alto de mi UIView!

Espero que esto ayude ....

+0

Esto me ayudó, ¡gracias! – Mike

Cuestiones relacionadas