我想以编程的方式从of资产中将几幅图像加载到数组中。我不知道资产中有多少图像,但这些图像是按顺序命名的,如:"img1_1"、"img1_2"、"img2_1"、"img2_2"、.
我将图像放在资产内部的文件夹中,因此文件夹"images1"包含以"img1_"开头的所有图像,而名为"images2"的文件夹包含以"img2_"开头的所有图像。这有用吗?
我如何在资产中获得像这样命名的图像的数量,以便迭代它们并将它们添加到我的数组中?
发布于 2016-08-31 16:16:38
这样做并不容易,因为文件是在编译时放在应用程序中的。不过,您可以在编译之前在构建阶段创建一个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,之前的海报要求提供更多的细节。
如果您不想处理构建阶段(我可能会选择),那么另一个选项是不使用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)
}https://stackoverflow.com/questions/39243939
复制相似问题