以编程方式访问图像资产

时间:2015-06-01 23:30:01

标签: ios objective-c

我的图片资源目录有一个名为" Nature"里面有数百个图像文件。

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

感谢您的帮助。

3 个答案:

答案 0 :(得分:9)

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

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

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

第1步:在Build Phases中添加脚本 - >运行脚本 enter image description here

echo "<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>" >  ${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 \<key\>$line\</key\>\<string\>$line\</string\>; done >> ${SRCROOT}/${PROJECT_NAME}/files.plist;
echo "</dict></plist>" >>  ${SRCROOT}/${PROJECT_NAME}/files.plist;
  

此脚本在项目目录中使用all生成 files.plist   资产文件中的图像将此文件添加到项目

第2步:访问plist文件

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

答案 1 :(得分:2)

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

在资源中为所有图片使用相同的前缀并附加递增数字
Image names with incrementing number
那么你可以:

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

创建文件夹参考而非图像资源

When importing images choose create folder references
Images in folder

因此,我们可以使用此代码段获取一系列图像文件:

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

希望这对你有帮助!

答案 2 :(得分:0)

我搜索了这个问题并得出结论,你无法直接访问// ~/Controllers/SomeController.cs public class SomeController: Controller { // ... [HttpPost] public PartialViewResult AddSomeInfo(SomeViewModel viewModel) { if (!ModelState.IsValid) { // ... handle } else { // Included this line for valid model state handling ModelState.Clear(); // then persist, etc // then change view model viewModel.Id = model.id; viewModel.createdOn = model.created_on; } // then returning the view model to the same partial should now work return PartialView("SomeInfo", viewModel); } } 目录。检查这些:

Access Asset Catalog pathForResource
Can I get a NSURL from an XCAssets bundle?

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