J'utilise le catalogue d'actifs de Xcode 5 et j'aimerais utiliser mon LaunchImage
comme image d'arrière-plan de ma vue d'accueil (une pratique assez courante pour que la transition du «chargement» au «chargé» paraisse fluide).
Je voudrais utiliser la même entrée dans le catalogue d'actifs pour économiser de l'espace et ne pas avoir à répliquer l'image dans deux ensembles d'images différents.
Cependant, appeler:
UIImage *image = [UIImage imageNamed:@"LaunchImage"]; //returns nil
la source
UIInterfaceOrientationIsLandscape()
plutôt.Les LaunchImages sont spéciales et ne sont pas en fait un catalogue d'actifs sur l'appareil. Si vous regardez en utilisant iFunBox / iExplorer / etc (ou sur le simulateur, ou dans le répertoire de construction), vous pouvez voir les noms finaux, puis écrire du code pour les utiliser - par exemple. pour un projet iPhone uniquement iOS7, cela définira la bonne image de lancement:
Je mets cela dans viewDidLoad.
Ce n'est pas vraiment l'idéal, ce serait formidable si Apple nous donnait une belle API pour le faire.
la source
Mon application ne prend actuellement en charge qu'iOS 7 et versions ultérieures.
Voici comment je référence l'image de lancement du catalogue d'actifs:
Vous pouvez ajouter plus de paires valeur / clé si vous souhaitez prendre en charge les anciennes versions d'iOS.
la source
UIScreen.mainScreen.bounds
est différent selon l'orientation actuelle de l'interface. Voir stackoverflow.com/a/24153540/158525Voici une catégorie sur UIImage basée sur la solution fournie par Cherpak Evgeny ci-dessus.
UIImage + SplashImage.h :
UIImage + SplashImage.m :
la source
Réponse de @ codeman mise à jour pour Swift 1.2:
Pour l'appeler et prendre en charge la rotation pour iOS 8:
Juste ce dont j'avais besoin, merci!
la source
Je viens d'écrire une méthode générale pour obtenir le nom de l'image de démarrage pour iPhone et iPad (paysage, portrait), cela a fonctionné pour moi, j'espère que cela vous aide également. J'ai écrit ceci avec l'aide d'autres réponses SO, merci @Pichirichi pour toute la liste.
D'autres méthodes utilitaires sont
la source
[screen.coordinateSpace convertRect:screen.bounds toCoordinateSpace:screen.fixedCoordinateSpace]
mais faites assurez-vous de tester si vous êtes sur iOS 8 en premier, sinon cela plantera.Version rapide de la réponse de Cherpak Evgeny:
la source
Suite à la réponse de @ Pichirich, j'ai référencé mon image de lancement dans InterfaceBuilder comme:
"LaunchImage.png"
... et avec Xcode 5.0.2, il extrait automatiquement l'image appropriée directement du catalogue d'actifs.
C'est ce à quoi je m'attendais - à l'exception du geste vicieusement méchant d'Apple consistant à renommer silencieusement "Default.png" en "LaunchImage.png" :)
la source
nil
après l'initialisation donnéeDans la documentation, il est clairement indiqué:
"Chaque ensemble dans un catalogue d'actifs a un nom . Vous pouvez utiliser ce nom pour charger par programme toute image individuelle contenue dans l'ensemble. Pour charger une image, appelez la méthode UIImage: ImageNamed: en transmettant le nom de l'ensemble contenant l'image . "
L'utilisation de la liste de Pichirichi permet de résoudre cette incohérence.
la source
UIImageView *myView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"LaunchImage"]];
Fonctionne très bien![UIImage imageNamed:..]
savoir lequel choisir?On peut facilement accéder à l'image de lancement par une ligne de code.
Veuillez suivre les étapes ci-dessous pour obtenir les fonctionnalités décrites ci-dessus.
Étape 1. Étendez la
UIImage
classe en créant une catégorie et ajoutez-y la méthode suivante.Étape 2. La méthode ci-dessus devrait fonctionner en ajoutant le code suivant également dans la même catégorie de
UIImage
la source
Je me rends compte que ce n'est pas nécessairement la meilleure solution pour tout le monde, mais le moyen le plus simple (et le moins sujet aux erreurs, à mon humble avis) est de faire une entrée séparée dans votre catalogue Images.xcassets. Je l'ai appelé
SplashImage
.Lorsque vous allez ajouter une nouvelle entrée, assurez-vous de ne pas sélectionner "Nouvelle image de lancement" comme option. Au lieu de cela, sélectionnez le "Nouvel ensemble d'images" générique. Ensuite, ouvrez l'inspecteur et sélectionnez les options appropriées. Si vous construisez uniquement pour des appareils Retina, comme je l'étais, vous pouvez sélectionner les éléments suivants:
Cela vous laissera avec quatre entrées (iPhone 4S, iPhone 5 (s, c), iPhone 6 et iPhone 6 Plus).
Les fichiers correspondant aux images sont les suivants:
Bien sûr, après avoir fait cela, vous pouvez simplement utiliser
[UIImage imageNamed:@"SplashImage"]
la source
Avec l'aide de la réponse de Pichirichi, j'ai implémenté la catégorie suivante (iOS 7+): UIImage + AssetLaunchImage
C'est en fait un peu plus que générer un nom à la volée, mais cela sera probablement utile.
la source
Mise à jour de la dernière syntaxe Swift (Swift 5)
la source