2013-06-11 13 views
77

Ich weiß, dass es ein neues Feature ist und dies möglicherweise nicht möglich ist, aber ich würde gerne einen Asset-Katalog verwenden, um meine Assets zu organisieren, aber ich greife programmgesteuert auf alle meine Bilder zu. Wie würde ich jetzt auf meine Bilder zugreifen? Muss ich sie nach wie vor Zugriff durch ihren Dateinamen wie folgt:Zugriff auf Asset Catalog programmgesteuert

[UIImage imageNamed:@"my-asset-name.png"];

Scheinbar hat der Asset-Katalog nicht die Erweiterung verweisen, so wäre es effizienter sein, darauf zuzugreifen, ohne die „.png“?

Der Grund, warum ich frage, anstatt für mich selbst zu testen ist, dass auch nach dem Entfernen meiner Vermögenswerte und Asset Catalog, dann Reinigen des Build-Ordners, kann ich immer noch auf meine Assets in meiner Anwendung zugreifen. Dies verhindert, dass ich den Asset-Katalog testen kann, wenn ich ihn implementiere.

Nach durch den Asset-Katalog suchen, fand ich die „Contents.json“ für jeden Vermögenswert und es ist wie so formatiert:

{ 
    "images" : [ 
    { 
     "idiom" : "universal", 
     "scale" : "1x" 
    }, 
    { 
     "idiom" : "universal", 
     "scale" : "2x", 
     "filename" : "[email protected]" 
    } 
    ], 
    "info" : { 
    "version" : 1, 
    "author" : "xcode" 
    } 
} 

Ich bin immer noch nicht sicher, wie ich es zugreifen sollte, aber vielleicht das wird helfen?

Antwort

112

Um auf das Bild aus dem Asset-Katalog zuzugreifen, müssen Sie nur auf den Namen der Asset-Gruppe ohne Erweiterungen zugreifen. Wenn Sie dem Asset-Katalog ein Bild mit dem Namen @"[email protected]" hinzufügen, wird eine Asset-Gruppe namens my-button erstellt.

nun alles, was Sie tun müssen, ist das Bild zugreifen wie so:

// Objective-C 
[UIImage imageNamed:@"my-button"]; 
// Swift 
UIImage(named: "my-button") 

Sie können aber auch die Asset-Gruppe bearbeiten, indem Sie die Umbenennung (ohne die Bilder zu umbenennen) oder Abändern einzelner Komponenten ist. Auf diese Weise können Sie einfacheren Namenskonventionen folgen und völlig unterschiedliche Assets zwischen verschiedenen UIScreen s scale s ohne scale Schecks anzeigen.

Um Bilder für verschiedene Gerätegrößen zu integrieren, müssen Sie sie möglicherweise unter dem Unterpunkt "Geräte" in den Optionen der Asset-Kataloggruppe umschalten. Here is an example of that toggle (available by right clicking the group).

+0

R4-Versionen, d. H. 568-Unterstützung, ist da. Wenn Sie die Attribute eines Bildsatzes anzeigen, können Sie im Drop-down "Geräte" die Option "Gerätspezifisch" auswählen und dann ein R4-Bild hinzufügen, das auf 4-Zoll-Geräten mit iOS 7 angezeigt wird. – bandejapaisa

+0

Gibt es einen programmgesteuerten Weg? Zugriff auf die Slicing-Informationen Neben dem Abrufen der capInsets -Eigenschaft aus dem UIImage-Objekt? – Klaas

+0

@Klaas Ich bin mir nicht sicher, warum Sie es auf andere Weise als die 'UIImage' benötigen.Und von dem, was ich gesehen habe, nein, da jedes Kategorie-Bild in der Gruppe ein völlig anderes Bild sein kann, also wird es keine allgemeinen Informationen wie Slicing geben. Oder fehlt mir etwas? – RileyE

1

@RileyE ist 100% richtig. Aufgrund meiner Erfahrungen ist es jedoch auch erwähnenswert, dass manchmal die Asset-Katalogreferenz für das Bild nachgestellten Leerraum enthalten kann. Sie würden wahrscheinlich nicht bemerken, wenn Sie Storyboards/Xibs verwenden, da die automatische Vervollständigung es hinzufügen wird. Aber wenn Sie es aus dem Code beziehen, ist es nicht so offensichtlich, was das Problem ist.

1

Swift

Sie können in Ihrem Asset catelog einen Verweis auf ein Bild erhalten mit

UIImage(named: "myImageName") 

Sie brauchen nicht die Erweiterung auf.

Verwandte Themen