Estoy usando el Asset Catalog de Xcode 5, y me gustaría usar my LaunchImage
como imagen de fondo de mi vista de inicio (una práctica bastante común para hacer que la transición de 'carga' a 'cargado' parezca fluida).
Me gustaría usar la misma entrada en el Catálogo de activos para ahorrar espacio y no tener que replicar la imagen en dos Conjuntos de imágenes diferentes.
Sin embargo, llamando:
UIImage *image = [UIImage imageNamed:@"LaunchImage"]; //returns nil
fuente
UIInterfaceOrientationIsLandscape()
lugar.Las LaunchImages son especiales y en realidad no son un catálogo de activos en el dispositivo. Si busca usando iFunBox / iExplorer / etc (o en el simulador, o en el directorio de compilación), puede ver los nombres finales y luego escribir el código para usarlos, por ejemplo. para un proyecto solo para iPhone con iOS7, esto establecerá la imagen de inicio correcta:
Pongo esto en viewDidLoad.
Esto no es realmente ideal, sería genial si Apple nos diera una buena API para hacer esto.
fuente
Actualmente, mi aplicación solo es compatible con iOS 7 y versiones posteriores.
Así es como hago referencia a la imagen de lanzamiento del catálogo de activos:
Puede agregar más pares clave-valor si desea admitir versiones anteriores de iOS.
fuente
UIScreen.mainScreen.bounds
es diferente según la orientación de la interfaz actual. Ver stackoverflow.com/a/24153540/158525Aquí una categoría en UIImage basada en la solución proporcionada por Cherpak Evgeny arriba.
UIImage + SplashImage.h :
UIImage + SplashImage.m :
fuente
La respuesta de @ codeman actualizada para Swift 1.2:
Para llamarlo y admitir la rotación para iOS 8:
¡Justo lo que necesitaba, gracias!
fuente
Acabo de escribir un método general para obtener el nombre de la imagen de bienvenida para iPhone y iPad (paisaje, retrato), funcionó para mí, espero que también te ayude. Escribí esto con la ayuda de otras respuestas SO, gracias @Pichirichi por toda la lista.
Otros métodos de utilidad son
fuente
[screen.coordinateSpace convertRect:screen.bounds toCoordinateSpace:screen.fixedCoordinateSpace]
pero haga asegúrese de probar primero si está en iOS 8, de lo contrario, se bloqueará.Versión rápida de la respuesta de Cherpak Evgeny:
fuente
Siguiendo la respuesta de @ Pichirich, hice referencia a mi imagen de lanzamiento en InterfaceBuilder como:
"LaunchImage.png"
... y con Xcode 5.0.2, está sacando automáticamente la imagen adecuada directamente del Catálogo de activos.
Esto es lo que esperaría, excepto por el movimiento brutalmente desagradable de Apple de cambiar silenciosamente el nombre de "Default.png" a "LaunchImage.png" :)
fuente
nil
después de la inicializaciónEn la documentación se indica claramente:
"Cada conjunto en un catálogo de activos tiene un nombre . Puede usar ese nombre para cargar mediante programación cualquier imagen individual contenida en el conjunto. Para cargar una imagen, llame a UIImage: ImageNamed: método pasando el nombre del conjunto que contiene la imagen . "
Usar la lista de Pichirichi ayuda a resolver esta inconsistencia.
fuente
UIImageView *myView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"LaunchImage"]];
Funciona muy bien![UIImage imageNamed:..]
sabría cuál elegir?Se puede acceder fácilmente a la imagen de lanzamiento mediante una línea de código.
Siga los pasos que se indican a continuación para lograr la funcionalidad descrita anteriormente.
Paso 1. Amplíe la
UIImage
clase creando una categoría y agregue el siguiente método.Paso 2. El método anterior debería funcionar agregando el siguiente código también en la misma categoría de
UIImage
fuente
Me doy cuenta de que esta no es necesariamente la mejor solución para todos, pero la forma más fácil (y menos propensa a errores, en mi humilde opinión) de hacerlo es haciendo una entrada separada en su catálogo de Images.xcassets. Lo llamé
SplashImage
.Cuando vaya a agregar una nueva entrada, asegúrese de no seleccionar "Nueva imagen de inicio" como una opción. En su lugar, seleccione el "Nuevo conjunto de imágenes" genérico. A continuación, abra el inspector y seleccione las opciones relevantes. Si está compilando solo para dispositivos retina, como yo, puede seleccionar lo siguiente:
Esto te dejará con cuatro entradas (iPhone 4S, iPhone 5 (s, c), iPhone 6 y iPhone 6 Plus).
Los archivos correspondientes a las imágenes son los siguientes:
Por supuesto, después de hacer esto, simplemente puede usar
[UIImage imageNamed:@"SplashImage"]
fuente
Con la ayuda de la respuesta de Pichirichi, he implementado la siguiente categoría (iOS 7+): UIImage + AssetLaunchImage
En realidad, es poco más que generar un nombre sobre la marcha, pero probablemente sea útil.
fuente
Actualizado a la última sintaxis de Swift (Swift 5)
fuente