2014-10-02 6 views
9

ist nicht möglich. Ich muss Bilder in eine statische Bibliothek einbinden. Ich habe ein Bündel erstellt und in meine Bilder eingefügt, das Problem ist, dass es funktioniert, wenn ich die Bilder direkt in das Bundle einfüge, aber nicht mehr funktioniert, wenn ich eine xcassets-Datei einfüge.Das Laden eines Bildes in xcassets in das Bundle

Ich folgte vielen Leitfäden und suchte nach einer Lösung auf dieser Seite. Die beliebteste Lösung ist diese Codezeile einzufügen:

[UIImage imageNamed:@"MyBundle.bundle/imageName"] 

aber es scheint

irgendwelche Ideen für mich nicht?

+0

vor demselben Problem, haben Sie das beheben können? – BaSha

+0

@BaSha ist es möglich, iOs 8 mit dieser Methode zu verwenden: + (UIImage *) imageNamed: (NSString *) Name inBundle: (NSBundle *) Bundle compatibleWithTraitCollection: (UITraitCollection *) traitCollection; Mit iOS 7 ist die beste Lösung, die Bilder aus der Datei xcassets – Serluca

+0

zu entfernen, obwohl ich Bilder separat im Paket hinzufügen musste, da iOS 7 Unterstützung benötigt wurde – BaSha

Antwort

9

Es gibt zwei Möglichkeiten, dies zu lösen,

Wenn Ihre App noch unterstützt iOS 7, können Sie diese verwenden Kategorie: https://gist.github.com/serluca/e4f6a47ffbc19fccc63e

Andernfalls von iOs beginnend 8 von Apple hat einen Weg, dies zu tun mit: + imageNamed:inBundle:compatibleWithTraitCollection:here

+0

wissen von irgendeiner Möglichkeit, dies in Interface Builder zu beziehen? – jowie

+1

@jowie hast du versucht mit dieser http://stackoverflow.com/a/7733614/1728552 – Serluca

+0

Ich tat, aber das bezieht sich auf eine PNG, anstatt eine .xcassets-Kennung. Nachdem ich gesagt habe, dass ich es nicht bemerkt habe, geht mein Problem etwas tiefer, weil es keine Assets von meinem benutzerdefinierten Framework importiert. Ich werde es wieder versuchen, nachdem ich (hoffentlich) mein anderes Thema herausgebracht habe. Vielen Dank! – jowie

7

Das gleiche Problem läuft. In der 1-Parameter imageNamed-Methode scheint die Inline-Bundle-Unterstützung für XCAssets unterbrochen zu sein. Es gibt eine Problemumgehung bei der Verwendung von imageNamed: inBundle: compatibleWithTraitCollection: Vorsicht, das ist nur iOS8 !!

NSBundle *bundle = [NSBundle bundleWithPath:[[NSBundle mainBundle] pathForResource:@"static_lib_bundle_name" ofType:@"bundle"]]; 
UIImage *image = [UIImage imageNamed:@"image_in_the_xcassets_you_want" inBundle:bundle compatibleWithTraitCollection:nil]; 

HINWEIS: traitCollection wird auf Null gesetzt, die Hauptbildschirmeigenschaften wie pro apple docs (i bekommen nicht ganz tun, was es bedeutet aber, wenn jemand weiß, bitte Kommentar!) Zu übergeben.

+0

jede gute Möglichkeit, es in iOS7 zu tun? – user1010819

+3

So hatte ich das gleiche Problem, sieht aus wie das Szenario ist, dass xcode kompilieren xcassets direkt in eine binäre Datei (. Car) und kopiert in Hauptbündel, was bedeutet, dass xcassets nicht in einer Bundle-Ressource enthalten sein können. https://devforums.apple.com/message/968859#968859 –

2

Unsere Bilder befinden sich in Images.xcassets und wir hatten ein Problem mit dem Laden von Bildern in einem IBDesignable. Der folgende Code hat den Job für die Vorschau im Interface Builder und die App auch:

NSBundle* bundle = [NSBundle bundleForClass:[self class]]; 
UIImage* image = [UIImage imageNamed:@"image.jpg" inBundle:bundle compatibleWithTraitCollection:nil]; 
+0

Wie gesagt, diese Methode ist ab iOs 8 verfügbar. Wenn Sie iOs 7 verwenden, können Sie stattdessen meine Kategorie https: //gist.github verwenden. com/serluca/e4f6a47ffbc19fccc63e – Serluca

2
definiert

Für Swift 2. 1:

let bundle = pathToBundle // define for your app or framework 
if let image = UIImage(named: "drop_arrow", inBundle: bundle, compatibleWithTraitCollection: nil) { 
    // process image 
}