70 votes

Accéder au répertoire pathForResource

Il semble que:

[[NSBundle mainBundle] pathForResource:@"name" ofType:@"png"];

Ne renvoie rien pour les actifs figurant dans le catalogue d'actifs Images.xcassets. J'ai aussi essayé:

[[NSBundle mainBundle] pathForResource:@"name" ofType:@"png" inDirectory:@"Images"];

[[NSBundle mainBundle] pathForResource:@"name" ofType:@"png" inDirectory:@"Images.xcassets"];

Mais ni l'un ni l'autre n'a fonctionné non plus.

Quelqu'un at-il réussi à récupérer des chemins d'accès aux actifs du catalogue?

27voto

sunnyxx Points 183

Même problème, mais je ne pense pas que nous pouvions y accéder via pathForResource,à l'exception ci-dessous:

UIImage* image = [UIImage imageNamed:@"name-in-asset-catalog"];

Il a été effacée documenté,"Chaque ensemble dans une société de catalogue a un nom. Vous pouvez utiliser ce nom par programmation de la charge de toute personne d'image contenues dans le set. Pour charger une image, appelez le UIImage:ImageNamed: méthode, en passant le nom de l'ensemble qui contient l'image."
J'ai trouvé que dans l'ensemble de respecté application,un fichier nommé "Actifs.voiture" est sorti, et je pense que c'est l'ensemble des images de jeux dans mon projet, et doit avoir été zippé ou quelque chose.
reportez-vous à apple document:
Xcode 5 fournit des fonctionnalités différentes pour les actifs catalogues en fonction de la cible de déploiement de votre projet:...

Pour tous les projets, les images individuelles peuvent être chargés en utilisant le nom de l'ensemble. Pour les projets avec une cible de déploiement d'iOS 7, Xcode, de la compilation de vos actifs catalogues dans un moteur d'exécution de format de fichier binaire qui réduit le temps de téléchargement de votre application.

donc, c'est ça.
Je me demande aussi le moyen de ne pas utiliser "imageNamed", je ne veux pas d'exécution à cache mes images.

11voto

Lyle Points 21
 [UIImage imageWithContentsOfFile:[NSString stringWithFormat:@"%@/%@.png", [[NSBundle mainBundle] resourcePath], imgName]];
 

imgName: le nom du jeu d'images, sans se soucier du nom réel de l'image dans le jeu d'images.

-3voto

Craig LaHote Points 31

Bien qu'il existe un Contenu.fichier json (voir ci-dessous) est associée à chaque élément dans xcassets qui contient les noms de fichier de l'élément de l'image, il ne semble pas être accessible au niveau de système de fichiers. Toutes les images sont placées dans un même système de fichiers du dossier lors de la compilation. Le fichier json est généré automatiquement et ne doivent pas être modifiés, mais il fournit un modèle pour une solution de contournement.

Le nom de chaque fichier, une image cohérente de suffixe pour correspondre à la correspondante de l'idiome, de l'échelle et du sous-type figurant dans le fichier json. Cela nécessite un travail manuel, sélectionnez "Afficher dans le Finder" option pour chaque actif, et de le renommer chaque fichier, mais une fois terminé, vous pouvez alors utiliser pathForResource en combinaison avec une fonction pour ajouter le suffixe approprié à l'actif de base nom pour récupérer la taille appropriée de l'image.

Exemple de code pour récupérer le chemin d'accès:

NSString *imageName = @"Add to Cart";
NSString *imageSuffix = [self someMethodThatDeterminesSuffix]; // Example: "-iphone-2x-retina4"
NSString *imagePath = [[NSBundle mainBundle] pathForResource:[NSString stringWithFormat:@"%@%@", imageName, imageSuffix] ofType:@"png"];

Exemple De Contenu.fichier json pour le "Ajouter au Panier" image de l'actif:

{
  "images" : [
    {
      "idiom" : "iphone",
      "scale" : "1x",
      "filename" : "Add to Cart-iphone-1x.png"
    },
    {
      "idiom" : "iphone",
      "scale" : "2x",
      "filename" : "Add to Cart-iphone-2x.png"
    },
    {
      "idiom" : "iphone",
      "filename" : "Add to Cart-iphone-2x-retina4.png",
      "subtype" : "retina4",
      "scale" : "2x"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

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