Accéder au catalogue d'actifs par programmation


96

Je sais que c'est une nouvelle fonctionnalité et que cela n'est peut-être pas possible, mais j'aimerais pouvoir utiliser un catalogue d'actifs pour organiser mes actifs, mais j'accède à toutes mes images par programmation. Comment accéder à mes images maintenant? Dois-je toujours y accéder par leurs noms de fichiers comme ceci:

[UIImage imageNamed:@"my-asset-name.png"];

Apparemment, le catalogue de ressources ne fait pas référence à l'extension, alors serait-il plus efficace d'y accéder sans le ".png"?

La raison pour laquelle je demande au lieu de tester par moi-même est que même après avoir supprimé mes actifs et mon catalogue d'actifs, puis nettoyé le dossier de construction, je peux toujours accéder à mes actifs dans mon application. Cela m'empêche de tester le catalogue d'actifs lorsque je l'implémente.

Après avoir parcouru le catalogue d'actifs, j'ai trouvé le "Contents.json" pour chaque actif et il est formaté comme suit:

{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "idiom" : "universal",
      "scale" : "2x",
      "filename" : "my-asset@2x.png"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

Je ne sais toujours pas comment je devrais y accéder, mais peut-être que cela aidera?

Réponses:


138

Pour accéder à l'image à partir du catalogue d'actifs, il vous suffit d'accéder au nom du groupe d'actifs sans aucune extension.

Ainsi, si vous ajoutez une image nommée @"my-button@2x.png"au catalogue d'actifs, il créera un groupe d'actifs appelé my-button.

Maintenant, il ne vous reste plus qu'à accéder à l'image comme ceci:

// Objective-C
[UIImage imageNamed:@"my-button"];
// Swift
UIImage(named: "my-button")

En outre, vous pouvez modifier le groupe de ressources en le renommant (sans renommer les images) ou en modifiant ses composants individuels. Cela vous permettra de suivre des conventions de dénomination plus simples et d'afficher des actifs complètement différents entre différents UIScreen scales sans aucune scalevérification.

Afin d'incorporer des images pour différentes tailles de périphérique, vous devrez peut-être le basculer sous le sous-titre "Périphériques" dans les options du groupe de catalogue d'actifs. Voici un exemple de cette bascule (disponible en cliquant avec le bouton droit sur le groupe).


Les versions R4, c'est-à-dire le support 568, sont là. Si vous affichez les attributs d'un ensemble d'images, vous pouvez sélectionner `` Spécifique à l'appareil '' dans la liste déroulante Appareils, puis vous pouvez ajouter une image R4, qui apparaîtra sur les appareils de 4 po exécutant iOS 7.
bandejapaisa

Existe-t-il un moyen d'accéder par programme aux informations de découpage? En plus d'obtenir la propriété capInsets de l'objet UIImage?
Klaas

@Klaas Je ne sais pas pourquoi vous auriez besoin de l'obtenir par un autre moyen que le UIImage. Et d'après ce que j'ai vu, non, car chaque image de catégorie dans le groupe peut être une image complètement différente, il n'y aura donc pas d'informations générales, comme le découpage, disponibles. Ou est-ce que je manque quelque chose?
RileyE

@RileyE J'ai besoin de faire quelques calculs pour une vue de superposition personnalisée et j'aimerais utiliser les mêmes encarts. Lorsque je dois uniquement créer une UIImage pour mes calculs, je préfère stocker la valeur nécessaire ailleurs (et redondante).
Klaas

1
Le code Swift semble être changé enUIImage(named: imageName)
HKTonyLee

26

Apple a également ajouté une nouvelle façon d'obtenir une image à partir d'actifs avec Swift 3, il s'appelle `` Image Literal '' et fonctionne comme ci-dessous:

Littéral d'image


5

Rapide

Vous pouvez obtenir une référence à une image dans votre catalogue d'actifs avec

UIImage(named: "myImageName")

Vous n'avez pas besoin d'inclure l'extension.


1

@RileyE a raison à 100%. Cependant, d'après mes expériences, il convient également de noter que parfois la référence du catalogue d'actifs pour l'image peut contenir un espace blanc de fin. Vous ne remarquerez probablement pas si l'utilisation de storyboards / xibs car la complétion automatique l'ajoutera. Mais quand vous le référencez à partir du code, le problème n'est pas si évident.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.