2009-09-28 13 views
6

Tengo muchos png con diferentes tamaños y quiero cargarlos en una tabla. Tengo este código:Las imágenes centradas son borrosas

charImage.image = [self imageForId:g.charId glyphNr:g.glyphNr]; 
[charImage sizeToFit]; 
//charImage.contentMode = UIViewContentModeCenter; 
charImage.center = CGPointMake(30, 23); 

Todo funciona bien, excepto que mi png está borroso. Si no los centro, son extremadamente agudos. Todos están hechos de curvas. No los exporté a todos, así que todavía tengo la oportunidad de exportar con un tamaño fijo y los dibujos ya centrados, pero quiero saber si estoy haciendo algo mal o incompleto. ¿Por qué están borrosos?

Creo que no es posible subir cualquier foto aquí ..

Respuesta

10

Esto se asegurará de que el marco es en coordenadas enteras:

int centerX = 30; 
int centerY = 23; 
CGSize size = charImage.frame.size; 
charImage.frame = CGRectMake((int)(centerX - size.width/2), 
          (int)(centerY - size.height/2), 
          size.width, size.height); 

la diferencia entre esto y

charImage.center = CGPointMake(30, 23); 

es que el COU .center colocador ld establece el origen en un punto no entero cuando cualquiera del ancho o alto es de la paridad incorrecta. Como han dicho otras personas aquí, las imágenes y el texto se ven borrosos cuando están en coordenadas no enteras.

+0

Perfecto, muchas gracias. –

+1

Tenga en cuenta que esto también ocurre cuando el tamaño de su imagen no es "par" ni en altura ni en ancho (por ejemplo, tamaño 301x199). En ese caso, usar UIViewContentModeCenter puede difuminar su imagen incluso sin utilizar el centro. –

1

podría utilizar coordenadas calculadas en lugar de contentMode:

charImage.frame = CGRectMake(x,y,width,height)

+0

me puede ayudar a calcular algunos valores fijos? esto es equivalente a la propiedad del centro pero todavía no son valores fijos, no sé cómo, los límites son 46x46px: charImage.frame = CGRectMake ((46- [charImage bounds] .size.width)/2 , (46- [charImage bounds] .size.height)/2, [charImage bounds] .size.width, [charImage bounds] .size.height); –

+0

Creo que está bien cambiar solo la posición, no calcular un nuevo marco, ¿no es así? Pero no estoy seguro de cuál es la propiedad. –

4

Esto sucede porque los PNGs quedan colocados en posiciones subpíxel . Usar sizeToFit junto con UIViewContentModeCenter hace que esto suceda. Cuando no usa UIViewContentModeCenter, las vistas se colocan en (0.0, 0.0) y, por lo tanto, no se difuminan.

Si se quiere evitar el desenfoque, primero no utilizan sizeToFit, a continuación, usar esto para centrar la imagen:

image.frame = CGRectMake(round(centerX - image.frame.size.width/2.0), 
         round(centerY - image.frame.size.height/2.0), 
         image.frame.size.width, 
         image.frame.size.height); 
+0

Según tengo entendido, sizeToFit hace que mi UIImageView tome el tamaño del UIImage, por lo que el contentMode aquí no tiene ningún efecto, por eso lo comenté. No pude manejar las escalas del UIImageView así que preferí centrar directamente el UIImageView. charImage es un UIImageView –

+0

Tiene razón: no necesita configurar el modo de contenido. Pero si ajusta SizeToFit, la imagen puede estirarse, y eso en sí mismo puede, por supuesto, hacer que la imagen aparezca borrosa. Ver respuesta actualizada. – Felixyz

Cuestiones relacionadas