2012-05-28 8 views
5

Tengo un problema que no he podido descifrar. Tengo una aplicación que tomará una foto del frente y otra de la cámara trasera, y luego los fusionará.Cargar retina (alta calidad) imágenes programaticamente (en botones)

El nombre de la aplicación es GroupCam

Sin embargo, tengo un problema en el que mis UIButtons no se cargarán como imágenes de la retina desde el principio. Si los configuro como @ 2x en el constructor de interfaz, aparecen en alta calidad, pero una vez que los vuelva a cargar programáticamente, aparecerán las versiones bajas.

Esto se debe a que, después de tomar una foto y cambiar la pantalla, las imágenes del botón cambian, pero cuando el usuario presiona el botón Atrás los iconos de la cámara se verán horribles (porque las versiones de baja calidad se están cargando) .

favor verifique en los siguientes cuadros:

Primera pantalla: Sólo el botón superior derecho aparece distorsionada porque estoy comprobando el valor del flash de la cámara y la "carga" de la imagen correspondiente programación.

First Screen

segunda pantalla: El usuario se ha movido a otra pantalla y volvió a la primera, todos los botones se volvieron a cargar y ahora todos se ven distorsionadas.

Second Screen

Si alguien tiene alguna idea de por qué está sucediendo esto realmente agradecería que!

Gracias.

Editar:

Así es como me carga las imágenes.

[self.flashButton setImage:[UIImage imageNamed:@"flashOff"] 
          forState:UIControlStateNormal]; 

Leí en algún lugar de internet que al hacerlo cargará automáticamente la versión más adecuada de la imagen.

También probé esto, pero el resultado es el mismo:

[self.takeButton setImage:[UIImage imageNamed:@"takePhoto.png"] forState:UIControlStateNormal]; 
+1

He obtenido excelentes resultados utilizando imágenes normales y de retina en una aplicación. Entonces, lo que sugiero que hagas es seleccionar la resolución normal de estas imágenes, y no incluirlas en tu proyecto (a través del tercer panel situado más a la derecha, simplemente deselecciona la casilla de verificación). Ahora tu aplicación SOLO tiene imágenes de retina. Bueno, si las cosas van mal, entonces algo en tu aplicación se estropeó. Hay algún problema con [UIImage imageNamed: foo.png]. Si cambia esa imagen, todos los usuarios posteriores de esa imagen obtendrán la imagen modificada. Vuelva a leer UIImage imageNamed: –

+2

Así que simplemente volví a leer su pregunta, y acabo de ver esta afirmación: "Si los configuro como" @ 2x "en el constructor de interfaz". Entonces, en IB, ha ingresado sus nombres como "[email protected]", y eso funciona. Entonces, lo único que puedo pensar que su problema podría ser es el formato de "@ 2x". ¿Estás SEGURO de haber nombrado correctamente esas imágenes? "[email protected]", NOT & 2x.png, etc. Parece que iOS no ve los archivos hi rez y esa es la ÚNICA razón que se me ocurre que lo explicaría . Intente eliminar el "@ 2x" en IB y vea qué sucede. Apuesto a que tienes todo bajo rez todo el tiempo entonces. –

+0

sí están formateados y nombrados correctamente. Las imágenes se cargarán en HD perfectamente bien por sí mismas, el único problema es cuando las cargo programáticamente. iOS decide cargar uno de baja definición. – Pochi

Respuesta

3

Si su aplicación es tomar una foto desde la cámara frontal y otra de la cámara trasera y fusionarlos juntos, entonces el dispositivo requiere un frente frente a la cámara. Todos los dispositivos iOS que tienen cámaras frontales también tienen pantalla retina (siempre y cuando no se desarrolle para el iPad 2, pero esa es una historia diferente) por lo que no debería tener imágenes normales, por lo que todas sus imágenes deben ser imágenes de retina Si no hay imágenes normales, entonces este problema no debería ocurrir en absoluto. Haga una copia de seguridad e intente eliminar todas las imágenes normales, y luego intente. Porque el uso de UIImage imageNamed: @ "ImageName", como dijiste, debería seleccionar automáticamente la imagen. ¡Buena suerte!

+0

Estaba esperando encontrar la razón por la que esto está sucediendo, pero parece ser una solución. – Pochi

+0

@LuisOscar Lo siento, esa fue mi mejor conjetura :(Intenta informar un error en bugreport.apple.com. – sridvijay

4

En primer lugar, es probable que valga la pena verificar que las versiones de baja resolución realmente se muestran. Hace poco me salté a una suposición similar, cambié la versión de baja resolución de la imagen por algo diferente, y confirmé que la versión de alta resolución todavía se estaba mostrando, pero estaba distorsionada.

Mi problema real, que se había puesto

<uibutton_superview>.layer.shouldRasterize = YES;

Si cualquiera de los botones antepasados ​​tienen este conjunto, es probable que podría ser su problema.

3

El caso de los nombres de archivo de las imágenes no importa en el simulador, pero sí en el dispositivo.

Use todos los casos consistentes. Image.png e [email protected] son reconocidos y funcionarán juntos en el simulador pero no en el dispositivo. use image.png e [email protected] O también puedes usar .jpg siempre que el caso coincida.

Cuestiones relacionadas