从iOS加载图像

时间:2011-04-14 14:29:41

标签: ios objective-c uiimage

我在项目中添加了一个填充了一些图像的.bundle文件夹。 这是正确的参考这个图像直接写像?:

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

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

13 个答案:

答案 0 :(得分:54)

如果不起作用,请尝试

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

最佳

答案 1 :(得分:48)

这是正确的,imageNamed:将搜索您的主要捆绑包。项目中的图像,即使它们位于Project Navigator中的不同组中,也将位于主包中,可以直接通过名称访问。

答案 2 :(得分:25)

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];

答案 3 :(得分:18)

Apple感谢在iOS 8中为此提供了适当的API,imageNamed:inBundle:compatibleWithTraitCollection:

它的使用方式如下:

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

或在swift:

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

答案 4 :(得分:6)

此方法在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;
}

答案 5 :(得分:5)

因为我不得不为Swift解决这个问题,所以我想加上....

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

我的捆绑包中TestImage.png组中Supporting Files的位置。

答案 6 :(得分:4)

Swift版本

@ AndrewMackenzie的答案并没有给我带来帮助。这就是工作

Dim Co As ChartObject
Set Co = ActiveChart.Parent
Debug.Print Co.Name 'retrieve chart object name
Co.Name = "Chart Name" 'assign name

我的完整答案是here

答案 7 :(得分:4)

对于Swift 3

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

答案 8 :(得分:4)

Swift 3

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

我无法获得当前的捆绑所以我这样做:

Bundle(for: type(of: self))

答案 9 :(得分:2)

如果您要在同一个viewController中使用它几次,请快速执行此操作:

将图片放在与下面相同的课程中的任何位置:

// this fetches the image from: MyBundle.bundle/folder/to/images/myImage.png
UIImage *myImage = [self imageFromBundle:@"MyBundle" withPath:@"folder/to/images/myImage.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/to/images/myImage.png"];

答案 10 :(得分:2)

如果您要构建框架,并且希望UIImage(named: "image")的所有实例始终使用您的自定义捆绑包,则可以进行如下扩展,将其覆盖

// Swift 5

extension UIImage {
  convenience init?(named: String) {
    self.init(named: named, in: <#Your Bundle#>, compatibleWith: nil)
  }
}

答案 11 :(得分:0)

这在 Swift 5

中对我有用
// Empty UIImage array to store the images in it.
var icons = [UIImage]()

let fileManager = FileManager.default
let bundleURL = Bundle.main.bundleURL
let assetURL = bundleURL.appendingPathComponent("MyBundle.bundle") // Bundle URL
do {
  let contents = try fileManager.contentsOfDirectory(at: assetURL,
 includingPropertiesForKeys: [URLResourceKey.nameKey, URLResourceKey.isDirectoryKey],
 options: .skipsHiddenFiles)
  for item in contents { // item is the URL of everything in MyBundle imgs or otherwise.

      let image = UIImage(contentsOfFile: item.path) // Initializing an image
      icons.append(image!) // Adding the image to the icons array
  }
}
catch let error as NSError {
  print(error)
}

答案 12 :(得分:0)

我在尝试解决从 Swift Package 加载图像时发现了这个问题,所以如果其他人也遇到了这个问题,我是这样解决的:

let image = UIImage(named: "imageName", in: Bundle.module, compatibleWith: nil)