J'ai ajouté à mon projet un .bundle
dossier rempli d'images. Est-il correct de se référer à cette image en écrivant directement quelque chose comme?:
[UIImage imageNamed:@"imageInBundle.png"];
Quelle est la meilleure méthode pour accéder et utiliser ces images?
C'est vrai, imageNamed:
recherchera votre forfait principal. Les images de votre projet, même si elles sont dans des groupes différents dans votre navigateur de projet, seront dans votre ensemble principal et accessibles directement par leur nom.
Si cela ne fonctionne pas, essayez
[UIImage imageNamed:@"yourbundlefile.bundle/imageInBundle.png"];
Meilleur
1) Si vous travaillez avec des bundles, accédez à la cible du bundle et définissez COMBINE_HIDPI_IMAGES sur NO. Dans un autre cas, l'image sera convertie au format tiff.
2) essayez ce code:
NSBundle *bundle = [NSBundle bundleWithURL:[[NSBundle mainBundle] URLForResource:@"YourBundle" withExtension:@"bundle"]];
NSString *imagePath = [bundle pathForResource:@"imageInBundle" ofType:@"png"];
UIImage *image = [UIImage imageWithContentsOfFile:imagePath];
Apple a heureusement fourni une API appropriée pour cela dans iOS 8, imageNamed:inBundle:compatibleWithTraitCollection:
.
Il est utilisé comme ceci:
[UIImage imageNamed:@"image-name"
inBundle:[NSBundle bundleForClass:self.class]
compatibleWithTraitCollection:nil]
ou en Swift:
let image = UIImage(named: "image-name",
inBundle: NSBundle(forClass: self),
compatibleWithTraitCollection: nil)
Cette méthode renvoie l'image n'importe où dans le projet xcode: =>
+(UIImage*)returnImageFromResourceBundle:(NSString*)nameOfImage
{
NSString *bundlePath = [[NSBundle mainBundle] pathForResource:@"Resource" ofType:@"bundle"];
NSString *imageString = [[NSBundle bundleWithPath:bundlePath] pathForResource:nameOfImage ofType:@"png"];
UIImage *retrievedImage = [[UIImage alloc] initWithContentsOfFile: imageString];
return retrievedImage;
}
Swift
let myImage = UIImage(named: "nameOfImage", in: Bundle(for: type(of: self)), compatibleWith: nil)
Je ne peux pas obtenir le pack actuel, alors je fais ceci:
Bundle(for: type(of: self))
Pour Swift 3
let prettyImage = UIImage(named: "prettyImage",
in: Bundle(for: self),
compatibleWith: nil)
Comme je devais comprendre cela pour Swift, j'ai pensé ajouter aussi ...
if let imagePath = NSBundle.mainBundle().pathForImageResource("TestImage.png")
{
imageView.image = NSImage(contentsOfFile: imagePath)
}
Où j'ai TestImage.png
dans le Supporting Files
groupe dans mon forfait.
Version Swift
@ La réponse d'AndrewMackenzie ne m'a pas fonctionné. C'est ce qui a fonctionné
let image = UIImage(named: "imageInBundle.png")
imageView.image = image
Ma réponse complète est ici .
Un moyen rapide de le faire si vous comptez l'utiliser plusieurs fois dans la même vueController:
Obtenez l'image n'importe où dans la même classe que la méthode ci-dessous:
// this fetches the image from: MyBundle.bundle/folder/to/images/myImage.png
UIImage *myImage = [self imageFromBundle:@"MyBundle" withPath:@"folder/to/images/myImage.png"];
Méthode qui récupère l'image:
- (UIImage *)imageFromBundle:(NSString *)bundleName withPath:(NSString *)imageName
{
NSURL *bundleURL = [[NSBundle mainBundle] URLForResource:bundleName withExtension:@"bundle"];
NSBundle *bundle = [NSBundle bundleWithURL:bundleURL];
NSString *imagePath = [bundle pathForResource:imageName ofType:nil];
UIImage *image = [UIImage imageWithContentsOfFile:imagePath];
return image;
}
Ou appelez-le simplement directement du bundle:
UIImage *myImage = [UIImage imageNamed:@"MyBundle.bundle/folder/to/images/myImage.png"];