98

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

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

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

4

4 回答 4

140

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

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

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

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

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

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

于 2013-06-12T17:01:15.157 回答
30

此外,Apple 还添加了使用 Swift 3 从资产中获取图像的新方法,它被称为“图像文字”,工作方式如下:

图像文字

于 2018-10-09T07:25:37.150 回答
5

迅速

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

UIImage(named: "myImageName")

您不需要包含扩展名。

于 2016-08-11T17:05:51.427 回答
1

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

于 2015-06-16T17:47:43.763 回答