使用IOS从包加载图像

我添加到我的项目一个.bundle文件夹充满了一些图像。 是否正确引用这个图像直接写像?

[UIImage imageNamed:@"imageInBundle.png"]; 

哪个是访问和使用这些图像的最佳方法?

这是正确的, imageNamed:将search你的主包。 即使您的项目中的图像位于您的Project Navigator中的不同组中,也将位于您的主包中,并且可以直接按名称访问。

如果这不起作用,请尝试

 [UIImage imageNamed:@"yourbundlefile.bundle/imageInBundle.png"]; 

最好

1)如果您正在使用捆绑包,请将捆绑目标并将COMBINE_HIDPI_IMAGES设置为NO。 在另一种情况下,图像将被转换为tiff格式。

2)试试这个代码:

 NSBundle *bundle = [NSBundle bundleWithURL:[[NSBundle mainBundle] URLForResource:@"YourBundle" withExtension:@"bundle"]]; NSString *imagePath = [bundle pathForResource:@"imageInBundle" ofType:@"png"]; UIImage *image = [UIImage imageWithContentsOfFile:imagePath]; 

苹果已经在iOS 8中为此提供了一个合适的API, imageNamed:inBundle:compatibleWithTraitCollection:

它是这样使用的:

 [UIImage imageNamed:@"image-name" inBundle:[NSBundle bundleForClass:self.class] compatibleWithTraitCollection:nil] 

或迅速:

 let image = UIImage(named: "image-name", inBundle: NSBundle(forClass: self), compatibleWithTraitCollection: nil) 

因为我不得不为Swift弄清楚这个问题,所以我想补充一下….

 if let imagePath = NSBundle.mainBundle().pathForImageResource("TestImage.png") { imageView.image = NSImage(contentsOfFile: imagePath) } 

在我的TestImage.png中的Supporting Files组里有TestImage.png地方。

Swift版本

@ AndrewMackenzie的回答没有奏效。 这是什么工作

 let image = UIImage(named: "imageInBundle.png") imageView.image = image 

我的完整答案在这里 。

此方法在xcode项目中的任何位置返回图像:=>

 +(UIImage*)returnUIImageFromResourceBundle:(NSString*)imageName { NSString *bundlePath = [[NSBundle mainBundle] pathForResource:@"Resource" ofType:@"bundle"]; NSString *receivedImageNam = [[NSBundle bundleWithPath:bundlePath] pathForResource:imageName ofType:@"png"]; UIImage *RetrievedImg = [[UIImage alloc] initWithContentsOfFile:receivedImageNam]; return RetrievedImg; } 

一个快速的方法,如果你要在同一个viewController中使用它几次:

按照下面的方法在相同的类中获取图像:

 // this fetches the image from: MyBundle.bundle/folder/tohttp://img.dovov.commyImage.png UIImage *myImage = [self imageFromBundle:@"MyBundle" withPath:@"folder/tohttp://img.dovov.commyImage.png"]; 

获取图像的方法:

 - (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; } 

或者直接从包中直接调用它:

 UIImage *myImage = [UIImage imageNamed:@"MyBundle.bundle/folder/tohttp://img.dovov.commyImage.png"]; 

对于Swift 3

 let prettyImage = UIImage(named: "prettyImage", in: Bundle(for: self), compatibleWith: nil) 

Swift 3

 let myImage = UIImage(named: "nameOfImage", in: Bundle(for: type(of: self)), compatibleWith: nil) 

我不能得到当前包,所以我这样做:

 Bundle(for: type(of: self))