97 votes

Accéder au catalogue d'actifs de manière programmée

Je sais que c'est une nouvelle fonctionnalité et que cela peut ne pas être possible, mais j'aimerais pouvoir utiliser un Catalogue d'Assets pour organiser mes ressources, même si j'accède à toutes mes images de manière programmée. Comment devrais-je accéder à mes images maintenant? Est-ce que j'accède toujours à elles par leur nom de fichier comme ceci :

[UIImage imageNamed:@"mon-nom-de-ressource.png"];

Apparemment, le Catalogue d'Assets ne prend pas en compte l'extension, donc serait-il plus efficace d'y accéder sans le ".png" ?

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

Après avoir parcouru le Catalogue d'Assets, j'ai trouvé le "Contents.json" pour chaque ressource et il est formaté comme ceci :

{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "idiom" : "universal",
      "scale" : "2x",
      "filename" : "mon-nom-de-ressource@2x.png"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

Je ne suis toujours pas sûr de la manière dont je devrais y accéder, mais cela pourrait peut-être aider ?

139voto

RileyE Points 2117

Pour accéder à l'image du catalogue des ressources, vous avez juste besoin d'accéder au nom du groupe de ressources sans aucune extension.

Donc, si vous ajoutez une image nommée @"my-button@2x.png" au catalogue des ressources, elle créera un groupe de ressources appelé my-button.

Maintenant, tout ce que vous avez à faire est d'accéder à l'image de cette manière :

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

De plus, vous pouvez modifier le groupe de ressources en le renommant (sans renommer les images) ou en changeant ses composants individuels. Cela vous permettra de suivre des conventions de nommage plus faciles ainsi que d'afficher complètement différents actifs entre différentes échelles d'écran sans aucun contrôle d'échelle.

Pour incorporer des images pour différentes tailles d'appareils, vous devrez peut-être le basculer sous le sous-titre "Appareils" dans les options du groupe du catalogue des ressources. Voici un exemple de ce basculement (disponible en faisant un clic droit sur le groupe).

0 votes

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

0 votes

Existe-t-il un moyen d'accéder programmationnellement aux informations de découpage? En dehors de la propriété capInsets de l'objet UIImage?

0 votes

@Klaas Je ne suis pas sûr 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 pourrait ê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 rate quelque chose?

29voto

Yigit Yilmaz Points 329

Aussi, Apple a ajouté une nouvelle façon d'obtenir des images à partir des ressources avec Swift 3, elle est appelée 'Image Literal' et fonctionne comme suit :

Image Literal

5voto

Suragch Points 197

Swift

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

UIImage(named: "monNomImage")

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

1voto

iosDevSi Points 1278

@RileyE a tout à fait raison. Cependant, d'après mes expériences, il est également intéressant de noter que parfois, la référence au catalogue d'actifs pour l'image peut contenir des espaces blancs en fin de chaîne. Vous ne le remarqueriez probablement pas si vous utilisez des storyboards/xibs car l'auto-complétion l'ajoutera. Mais lorsque vous y faites référence depuis le code, le problème n'est pas aussi évident.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X