获取 xcasset 中的图像数量

Get number of images in xcasset

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

我将图像放在资产内的文件夹中,因此文件夹 "images1" 包含名称以 "img1_" 开头的所有图像,名为 "images2" 的文件夹包含所有以 [= 开头的图像17=]。有帮助吗?

如何获取资产中这样命名的图像数量,以便我可以遍历它们并将它们添加到我的数组中?

因为文件是在编译时放置在应用程序中的,所以没有真正简单的方法来解决这个问题。不过,您可以在编译之前在构建阶段创建一个 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

此外,这里有一个 对先前发帖人询问的已接受答案的更详细信息。

如果您不想处理构建阶段,我可能会选择的另一种选择是不使用 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)
}