objective-c - snapseed - mejor aplicacion para editar fotos android
Recursos de imagen para iOS (5)
Probablemente me falta algo obvio aquí, pero no he podido resolver el siguiente problema:
Tengo un proyecto con recursos de imágenes para pantallas normales y retinas , como someimage.png y [email protected] , que se almacenan en un paquete separado. Cuando construyo el proyecto, Xcode los empaqueta automáticamente en un solo tiff de imageName.tiff
páginas ( imageName.tiff
), lo he comprobado en el buscador - en realidad es tiff de varias páginas con ambas imágenes. Sin embargo, aquí viene un problema: me cuesta cargar el recurso apropiado.
Lo que hago es:
NSString * imageName = ... ;
NSLog(@"imageName: %@", imageName);
UIImage * someImage = [UIImage imageNamed: imageName];
También prefiero el método auxiliar, que devuelve paquete con recursos:
+(NSBundle *) resourcesBundle
{
NSBundle *bundle = [NSBundle bundleWithURL:[[NSBundle mainBundle] URLForResource:@"MyResourcesBundle" withExtension:@"bundle"]];
return bundle;
}
Intenté seguir por imageName
:
imageName = [[AuxClass resourcesBundle] pathForResource:@"someimage" ofType:@"png"];
en este caso tengo null
para imageName
.
imageName = [[AuxClass resourcesBundle] pathForResource:@"someimage" ofType:@"tiff"];
en este caso, se devuelve la ruta de la imagen imageWithContentsOfFile
, sin embargo, solo funciona si uso imageWithContentsOfFile
lugar de imageNamed
, y no toma el recurso apropiado: carga el recurso para retina a pesar del tipo de pantalla.
Si omito filetype (como lo hice antes de agregar @2x
recursos, y funcionó bien, y fue lo primero que probé y estaba seguro de que iba a funcionar)
imageName = [NSString stringWithFormat: @"%@/%@",
@"MyResourcesBundle.bundle"",
@"someimage" ];
nada está cargado.
Agregar la extensión ".tiff" tiene el mismo efecto que pathForResource:
- se carga el recurso para retina, sin tener en cuenta el recurso para la pantalla que no retina.
Entonces, ¿qué me estoy perdiendo? ¿Cuál es la forma correcta de cargar imágenes?
¿Has intentado simplemente cargar la imagen usando:
UIImage * someImage = [UIImage imageNamed: @"someimage"];
(suponiendo que tiene una imagen llamada ''someimage'' en su proyecto, por ejemplo someimage.png)
El código seleccionará automáticamente las versiones retina / no retina según la plataforma.
Si el problema es que se crean los TIFF, verifique:
En la última versión de XCode, vaya al menú Editor, luego seleccione "validar configuración", que debería eliminar esa combinación de ilustraciones.
Si está trabajando con paquetes que van a
-> configuración de compilación -> COMBINE_HIDPI_IMAGES a NO,
¡y solo necesitas limpiar y construir!
-> configuración de compilación -> COMBINE_HIDPI_IMAGES a NO
esta es la única solución que funciona y no es necesario ningún otro cambio
Las TIFF multipágina son solo para OSX; no funcionan en iOS.
¡Así que debe dejar de intentar acceder a recursos que, por su propia naturaleza, son inaccesibles y hacer las cosas bien!
Debe abrir el proyecto que genera el paquete de recursos externos , seleccionar el destino, ir a Configuración de construcción y luego al subtítulo Implementación, y establecer "Combinar ilustraciones de alta resolución" a No. Luego, recompilar el paquete de recursos externos.
En su proyecto principal, ahora debería poder leer los PNG de la manera normal.
Cuando está creando imágenes para su aplicación, digamos que está creando una imagen llamada example
.
Deberías guardar lo siguiente:
- ejemplo ~ iphone.png -> esto es para iPhone no retina
- [email protected] -> esto es para retina iPhone
- ejemplo ~ ipad.png -> esto es para iPad no retina
- [email protected] -> esto es para retina iPad
Entonces, no importa desde donde lo llames, simplemente llámalo de esta manera, asumiendo que myImageView es un objeto UIImageView:
[myImageView setImage:[UIImage imageNamed:@"example"]];
Apple recomienda encarecidamente que use imágenes png. Además, el sistema operativo se encarga de encontrar la imagen correcta para el dispositivo deseado. No necesita preocuparse por encontrar el camino y todas esas cosas. +(UIImage*)imageNamed:(NSString*)name
busca la imagen correcta en el paquete de recursos, y por cierto, para devolver el paquete con sus recursos simplemente llame a [NSBundle mainBundle];