2015-02-28 7 views
6

Я разрабатываю рамки IOS, которая включает в себя ресурсы изображений, я называю методы ниже в framwork,Как разработать инфраструктуру iOS, которая включает в себя ресурсы изображения?

crossImage = [UIImage imageNamed:@"cross"]; 
arrowImage = [UIImage imageNamed:@"arrow"]; 

, а затем я построить демонстрационный пример, чтобы проверить свою структуру, но найти crossImage и arrowImage оба ноль; Впоследствии, я считаю, imageNamed: метод будет искать изображения в каталоге приложения, а не в фреймворке, поэтому я могу исправить это, добавив два изображения в демонстрационный проект. Однако он едва изящный. поэтому любые другие решения для нацеливания изображений в моих рамках?

ответ

0

В конце концов, я создаю пакет для хранения всех ресурсов изображений, и мы обеспечиваем * .framework и * .bunlde, это более элегантно.

+1

Можете ли вы более четко узнать, как вы их предоставляете? Пример кода был бы полезен. – Herbal7ea

20

Вы можете загрузить изображение с помощью рамки:

+ (UIImage *)imageNamed:(NSString *)name 
       inBundle:(NSBundle *)bundle 
compatibleWithTraitCollection:(UITraitCollection *)traitCollection 

метод.

В вашей рамочном классе записи, как:

NSBundle *frameWorkBundle = [NSBundle bundleForClass:[self class]]; 
UIImage *arrow = [UIImage imageNamed:@"arrow" inBundle:frameWorkBundle compatibleWithTraitCollection:nil]; 
UIImage *cross = [UIImage imageNamed:@"cross" inBundle:frameWorkBundle compatibleWithTraitCollection:nil]; 

UIImage Class Reference см для получения дополнительной информации об этом методе.

+0

Метод, который вы предлагаете, поддерживает только iOS 8.0 и более поздние версии, что делать, если на iOS 7.0 и 6.0? –

+1

@GaojinHsu: AFAIK в iOS 7 и 6.0 яблоко не будет поддерживать создание пользовательских фреймворков. Для этого используйте статическую библиотеку и пользовательский комплект. –

1

Вы также можете загрузить изображения с помощью:

[[UIImage alloc] initWithContentsOfFile:path]; 

путь, который вы хотите, чтобы сформировать из пути пучка. Что-то вроде:

NSBundle *bundle = [NSBundle bundleForClass:[YourFramework class]]; 
NSString* path = [bundle pathForResource:@"cross.jpg" ofType:nil]; 
1

Это будет работать только тогда, когда ваши изображения НЕ в .xcasserts.

UIImage *image = [UIImage imageNamed:@"YourFramework.framework/imageName"]