2016-08-31 2 views
0

Ich möchte programmgesteuert ein paar Bilder in Arrays von meinem Xcassets laden. Ich weiß nicht, wie viele Bilder gibt es in der Asset ist, aber die Bilder sind in der genannten Reihenfolge, wie folgt aus: "img1_1", "img1_2", "img2_1", "img2_2", ...Anzahl der Bilder in xcasset

Ich habe die Bilder in Ordnern innerhalb des Asset, Der Ordner "images1" enthält alle Bilder mit Namen beginnend mit "img1_" und der Ordner "images2" enthält alle Bilder beginnend mit "img2_". Hilft das?

Wie bekomme ich die Anzahl der Bilder im Asset, die so benannt sind, damit ich sie durchlaufen und sie zu meinem Array hinzufügen kann?

+0

Haben Sie dieses Problem gelöst? – mafioso

+0

Ich erinnere mich nicht wirklich, aber ich glaube, dass ich eine etwas modifizierte Form von Dereks Code verwendet habe – LinusGeffarth

Antwort

2

Es gibt keine wirklich einfache Möglichkeit, da die Dateien zur Kompilierzeit in der App platziert werden. Sie können jedoch in den Build-Phasen ein RunScript erstellen, das vor dem Kompilieren ausgeführt wird und eine Textdatei der Bilder erstellt. Dann können Sie diese Textdatei einlesen und ein Array von Bildern auffüllen. Sie können dieses Array verwenden, um die benötigten Details zu erhalten.

RunScript in den Build-Phasen:

#!/bin/sh 
>./your_app_folder/fileNames.txt 
for FILE in ./your_app_folder/Images.xcassets/actions/*; do 
echo $FILE >> ./your_app_folder/fileNames.txt 
done 

Auch ist hier ein link auf eine akzeptierte Antwort, dass ein früheres Plakat mit mehr Details gefragt.

Eine andere Option, wenn Sie nicht mit Build-Phasen arbeiten wollen, und eine, die ich wahrscheinlich wählen würde, ist die Datei Assets.xcassets nicht zu verwenden. Platzieren Sie die Bilder einfach in einem Ordner in Ihrem App-Bundle. Es ist viel einfacher, aus dem Bündel zu lesen.

UPDATE:

Für die zweite Option, können Sie Ihre Bilder (oder Ordner mit Bildern) zu Ihrem Projekt ziehen, aber sicher Kopie als Ordner Referenz und nicht als Gruppe. In Ihrem Code können Sie diesen Ordner dann mit dem FileManager lesen.

imageNames wird in diesem Fall ein Array von Dateinamen in diesem URL-Pfad sein. Wenn Sie diese Route verwenden, müssen Sie die Bilder wahrscheinlich auch über contentsOfFile laden.

if let imagePath = bundle.path(forResource: fileName, ofType: nil) { 
    myImage = UIImage(contentsOfFile: imagePath) 
} 
+0

Danke für Ihre Antwort. Wie würde ich bei der zweiten Option vorgehen? – LinusGeffarth

+1

Ich aktualisierte die Antwort mit mehr Details zur zweiten Option. Nur ein Kopf hoch, der Code ist in Swift 3. – Derek

Verwandte Themen