使用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))