2015-02-28 20 views
6

Zajmuję się tworzeniem ram iOS, który obejmuje zasoby obrazów, wzywam metody poniżej w ram prac,Jak opracować framework iOS zawierający zasoby graficzne?

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

a potem zbudować demo przetestować ram, ale znaleźć crossImage i arrowImage są zarówno nil; Potem znajdę imageNamed: metodę , która będzie szukała obrazów w katalogu aplikacji, nie w frameworkach, więc mogę to naprawić, dodając dwa obrazy do projektu demonstracyjnego. Jest jednak ledwo elegancki. więc jakieś inne rozwiązania, by celować w obrazy w mojej strukturze?

Odpowiedz

0

W końcu utworzyć pakiet do przechowywania wszystkich zasobów graficznych, a my zapewniamy * .framework i * .bunlde, że jest bardziej elegancki.

+1

Czy możesz lepiej wyjaśnić, w jaki sposób je udostępniasz? Pomocny byłby przykładowy kod. – Herbal7ea

20

Można załadować obraz z ramy przy użyciu:

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

metody.

W swojej ramowej klasy pisać jak:

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

Patrz UIImage Class Reference uzyskać więcej informacji na temat tej metody.

+0

Proponowana metoda obsługuje tylko iOS 8.0 i nowsze wersje, a co jeśli w systemie iOS 7.0 i 6.0? –

+1

@GaojinHsu: AFAIK w Apple iOS 7 i 6.0 nie obsługuje tworzenia niestandardowych frameworków. Użyj biblioteki statycznej i niestandardowego pakietu do tego celu. –

1

Można także załadować obrazy za pomocą:

[[UIImage alloc] initWithContentsOfFile:path]; 

ścieżki będziemy chcieli, aby wygenerować ze ścieżki wiązki. Coś takiego:

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

Będzie to działać tylko wtedy, gdy obrazy NIE są w .xcasserts.

UIImage *image = [UIImage imageNamed:@"YourFramework.framework/imageName"] 
Powiązane problemy