获取xcasset中的图像数量

时间:2016-08-31 08:01:44

标签: swift image loops xcasset

我想以编程方式将几个图像从我的xcassets加载到数组中。我不知道资产中有多少图像,但图像按顺序命名,如下所示:"img1_1""img1_2""img2_1""img2_2" ,...

我将图片放在资源中的文件夹中,因此文件夹"images1"包含名称以"img1_"开头的所有图片,名为"images2"的文件夹包含以{{1}开头的所有图片}。这有帮助吗?

如何获取资产中名称相同的图像数量,以便我可以迭代它们并将它们添加到我的数组中?

1 个答案:

答案 0 :(得分:2)

由于文件在编译时放在应用程序中,因此没有一种简单易行的方法。但是,您可以在编译之前在Build阶段中创建RunScript,以创建图像的文本文件。然后,您可以读取该文本文件并填充图像数组。您可以使用该数组来获取所需的详细信息。

构建阶段中的RunScript

#!/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

另外,这里有一个link一个已接受的答案,上一张海报询问了更多细节。

如果您不想处理Build Phases,而我可能选择的另一个选项,则不使用Assets.xcassets文件。只需将图像放在应用包中的文件夹中即可。从捆绑包中读取起来要容易得多。

<强>更新

对于第二个选项,您可以将图像(或图像文件夹)拖动到项目中,但请确保复制为文件夹参考而不是组。然后在您的代码中,您可以使用FileManager读取该文件夹。

let fileManager = FileManager.default
let imagePath = Bundle.main.resourcePath! + "/your_new_folder"
let imageNames = try! fileManager.contentsOfDirectory(atPath: imagePath)
在这种情况下,

imageNames将是该url路径中的文件名数组。如果走这条路线,你可能也需要通过contentsOfFile加载图像。

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