Загрузить изображение из комплекта с iOS - PullRequest
58 голосов
/ 14 апреля 2011

Я добавил в свой проект папку .bundle, заполненную несколькими изображениями. Правильно ли ссылаться на это изображение, прямо писать что-то вроде?

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

Какой метод доступа к этим изображениям является лучшим?

Ответы [ 10 ]

54 голосов
/ 24 октября 2012

Если это не сработает, попробуйте

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

Best

48 голосов
/ 14 апреля 2011

Это правильно, imageNamed: будет искать ваш основной комплект. Изображения в вашем проекте, даже если они находятся в разных группах в Навигаторе проектов, будут в вашем основном комплекте и могут быть доступны непосредственно по имени.

25 голосов
/ 15 июля 2013

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];
19 голосов
/ 06 июля 2016

Apple, к счастью, предоставила надлежащий API для этого в iOS 8, 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)
6 голосов
/ 03 мая 2016

Этот метод возвращает изображение в любом месте проекта 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 голосов
/ 26 апреля 2017

Swift 3

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

Я не могу получить текущий пакет, поэтому я делаю это:

Bundle(for: type(of: self))
5 голосов
/ 28 февраля 2017

для Swift 3

let prettyImage = UIImage(named: "prettyImage",
            in: Bundle(for: self),
            compatibleWith: nil)
5 голосов
/ 04 июля 2015

Так как я должен был выяснить это для Свифта, подумал, что я бы добавил также ...

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

Где у меня есть TestImage.png в группе Supporting Files внутри моего пакета.

4 голосов
/ 22 декабря 2015

Swift версия

@ Ответ Эндрю Маккензи не сработал. Вот что сработало

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

Мой полный ответ: здесь .

2 голосов
/ 13 апреля 2016

Быстрый способ сделать это, если вы собираетесь использовать его пару раз в одном и том же 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"];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...