以编程方式访问资产目录


96

我知道这是一项新功能,可能无法实现,但是我很希望能够使用资产目录来组织我的资产,但是我可以通过编程方式访问所有图像。我现在将如何访问我的图像?我是否仍按其文件名访问它们,如下所示:

[UIImage imageNamed:@"my-asset-name.png"];

看来,资产目录没有引用该扩展名,因此如果没有“ .png”,则访问它会更有效吗?

我之所以要求自己而不是自己进行测试,是因为即使删除了资产和资产目录,然后清理了构建文件夹,我仍然可以在应用程序中访问资产。在实施资产目录时,这使我无法测试资产目录。

浏览资产目录后,我发现了每个资产的“ Contents.json”,其格式如下:

{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "idiom" : "universal",
      "scale" : "2x",
      "filename" : "my-asset@2x.png"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

我仍然不确定应该如何访问它,但这也许会有所帮助吗?

Answers:


138

为了从资产目录访问映像,您只需要访问资产组的名称,而无需任何扩展名。

因此,如果您添加名为@"my-button@2x.png"资产目录的图像,它将创建一个名为的资产组my-button

现在,您要做的就是像这样访问图像:

// Objective-C
[UIImage imageNamed:@"my-button"];
// Swift
UIImage(named: "my-button")

此外,您可以通过重命名资产组(而不重命名图像)或更改其单个组件来编辑资产组。这将使您遵循更容易的命名约定,并且UIScreen scale无需scale检查就可以显示不同s 之间的完全不同的资产。

为了合并用于不同设备尺寸的图像,您可能需要在资产目录组选项的“设备”子标题下切换图像。这是该切换的示例(可通过右键单击组来使用)。


有R4版本,即568支持。如果您查看的图像集的属性,你可以选择“设备专用”从设备下拉,然后你可以添加一个R4的图像,这将出现在运行iOS 7.4"装置
bandejapaisa

有什么方法可以以编程方式访问切片信息?除了从UIImage对象获取capInsets属性之外?
克拉斯

@Klaas我不确定您为什么需要通过以外的任何其他方式来获取它UIImage。从我所见,没有,因为组中的每个“类别图像”可能是一个完全不同的图像,因此不会有任何常规信息(例如切片)。还是我错过了什么?
RileyE 2013年

@RileyE我需要对自定义叠加视图进行一些计算,并希望使用相同的插图。当我只需要为计算创建UIImage时,我希望将所需的值存储在其他位置(并且冗余)。
克拉斯

1
Swift代码似乎已更改为UIImage(named: imageName)
HKTonyLee '16


5

迅速

您可以通过以下方式获取资产类别日志中对图像的引用:

UIImage(named: "myImageName")

您不需要包括扩展名。


1

@RileyE是100%正确的。但是,从我的经验来看,还值得注意的是,有时图像的资产目录参考可能包含尾随空白。您可能不会注意到是否使用情节提要/ xib,因为自动完成功能会添加它。但是,当您从代码中引用它时,问题并不那么明显。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.