以编程方式访问图像资产

我的图像资源目录有一个名为“自然”的文件夹,里面有数百个图像文件。

我想在我的图像资源中的“自然”目录下获取一组图像文件名。 然后,我将从该数组中选择一个随机图像名称,并使用[UIImage imageNamed:@"..."]显示它。 我被困在如何在’IncludedStudyImages’目录下获取一系列图像名称。 我甚至无法在文档中找到有关如何以编程方式与我的图像资源进行交互的任何内容(除了显示它们)。

谢谢你的帮助。

这可能会迟到,但这可能有助于其他人

您无法直接访问资产中的所有文件,因为它已编译为.car

从资产访问所有文件的替代方法是创建.plist文件,其中包含资产包含的所有图像,并且可以轻松访问plist文件。 以下是实现此目的的步骤

第1步:在Build Phases – > Run Script中添加脚本 在此处输入图像描述

 echo "   " > ${SRCROOT}/${PROJECT_NAME}/files.plist; ## Chnage Assets.xcassets if not using default one find ${SRCROOT}/${PROJECT_NAME}/Assets.xcassets -type f -not -iname "*@*" -name "*.png" -exec basename {} \; | while read line; do echo \$line\\$line\; done >> ${SRCROOT}/${PROJECT_NAME}/files.plist; echo "" >> ${SRCROOT}/${PROJECT_NAME}/files.plist; 

此脚本在项目目录中生成files.plist ,资产文件中的所有图像都将此文件添加到项目中

第2步:访问plist文件

 NSURL *filepath = [[NSBundle mainBundle] URLForResource:@"files" withExtension:@"plist"]; NSMutableDictionary *allXCAssetsImages = [NSMutableDictionary dictionaryWithContentsOfFile:filepath.path]; 

我知道有两种方法可以获得一个图像文件数组。


使用前缀在图像资源中命名
在此处输入图像描述
你可以:

 for (int i = 1; i <= 6; i++) { UIImage *image = [UIImage imageNamed:[NSString stringWithFormat:@"bg_button%d", i]]; NSLog(@"%@", image); } 

创建文件夹引用而不是图像资源

在此处输入图像描述
在此处输入图像描述

所以我们可以得到一个图像文件数组:

 NSString *directory = [NSString stringWithFormat:@"Intro"]; NSArray *intros = [[NSBundle mainBundle] pathsForResourcesOfType:@"png" inDirectory:directory]; NSLog(@"%@", intros); 

希望这对你有所帮助!

我已经搜索了这个问题并得出结论,你无法直接访问IncludedStudyImages目录。 检查这些:

访问资产目录pathForResource
我可以从XCAssets包中获得NSURL吗?

解决方法的另一种方法是您可以根据某个顺序预定义文件名。 例如“image1.png”,“image2.png”,“image3.png”等名称。 使用这种方式,您可以选择随机图像function。