以编程方式访问资产目录

时间:2013-06-11 19:39:26

标签: ios objective-c xcode assets

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

[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"
  }
}

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

3 个答案:

答案 0 :(得分:125)

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

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

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

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

此外,您可以通过重命名资产组(不重命名图像)或更改其各个组件来编辑资产组。这样,您就可以按照更简单的命名惯例,在不同的UIScreen scale之间显示完全不同的资产,而不进行任何scale次检查。

为了合并不同设备尺寸的图像,您可能需要在资产目录组选项的“设备”子标题下进行切换。 Here is an example of that toggle (available by right clicking the group).

答案 1 :(得分:12)

苹果还增加了一种新的方法,可以使用Swift 3从资产中获取图像,它被称为'Image Literal',其工作方式如下:

Image Literal

答案 2 :(得分:1)

@RileyE 100%正确。但是,根据我的经验值得注意的是,有时图像的资产目录引用可能包含尾随空格。你可能不会注意到如果使用storyboards / xibs,因为自动完成将添加它。但是当你从代码中引用它时,问题就不那么明显了。