以编程方式访问资源目录

100

我知道这是一个新功能,也许不可能,但我想使用资源目录来组织我的资源,但我通过编程访问所有的图片。现在该如何访问我的图片?我仍然像这样通过它们的文件名来访问它们吗:

[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个回答

142

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

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

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

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

此外,您可以通过更改资产组件的名称(而无需更改图像)或更改其各个组成部分来编辑资产组。这将使您能够遵循更容易的命名规则,并在不进行比例检查的情况下在不同的 UIScreen scale 之间显示完全不同的资产。

为了在不同设备尺寸上使用图片,您可能需要在 Asset Catalog Group 的选项中切换到“Devices”子标题下。 这里有一个切换的示例(通过右键单击组可获得)。


R4版本,即568支持,已经存在。如果您查看图像集的属性,可以从设备下拉菜单中选择“特定设备”,然后添加一个R4图像,它将出现在运行iOS 7的4英寸设备上。 - bandejapaisa
有没有办法通过编程访问切片信息?除了从UIImage对象获取capInsets属性之外? - Klaas
@Klaas 我不确定为什么你需要通过其他方式获取它而不是使用 UIImage。从我所见,每个组中的类别图像可能是完全不同的图像,因此不会有任何通用信息可用,例如切片。或者我错过了什么吗? - RileyE
@Klaas 为了访问那些信息,操作系统无论如何都必须读取图像。UIImage只是方便处理的对象。为了获取初始存储,即使操作系统自动处理,图像也必须至少被读取一次。你只需要手动完成这个过程。 - RileyE
1
Swift代码似乎已更改为UIImage(named: imageName) - HKTonyLee
显示剩余6条评论

29

此外,苹果公司在 Swift 3 中新增了一种获取资源中图像的方式,称之为'Image Literal',操作如下:

Image Literal


5

Swift

您可以使用以下代码获取您的资源目录中图像的引用:

UIImage(named: "myImageName")

您不需要包含扩展名。


1

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接