【问题标题】:Access Asset Catalog programmatically以编程方式访问资产目录
【发布时间】:2013-06-07 18:56:02
【问题描述】:

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

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

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

【问题讨论】:

    标签: ios objective-c xcode assets


    【解决方案1】:

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

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

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

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

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

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

    【讨论】:

    • R4 版本,即 568 支持,在那里。如果您查看图像集的属性,您可以从“设备”下拉列表中选择“特定设备”,然后您可以添加 R4 图像,该图像将出现在运行 iOS 7 的 4" 设备上。
    • 有没有办法以编程方式访问切片信息?除了从 UIImage 对象中获取 capInsets 属性?
    • @Klaas 我不确定您为什么需要通过UIImage 以外的任何其他方式获取它。从我所见,不,因为组中的每个类别图像都可能是完全不同的图像,所以不会有任何一般信息,如切片,可用。还是我错过了什么?
    • @RileyE 我需要为自定义叠加视图进行一些计算,并希望使用相同的插图。当我只需要为我的计算创建一个 UIImage 时,我宁愿将所需的值存储在其他地方(并且是多余的)。
    • Swift代码好像改成UIImage(named: imageName)
    【解决方案2】:

    Apple 还添加了使用 Swift 3 从资产中获取图像的新方法,它被称为 'Image Literal',工作如下:

    【讨论】:

      【解决方案3】:

      斯威夫特

      您可以通过

      获得对资产类别中图像的引用
      UIImage(named: "myImageName")
      

      您不需要包含扩展名。

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          猜你喜欢
          • 2015-08-15
          • 1970-01-01
          • 1970-01-01
          • 2013-09-28
          • 2020-07-09
          • 1970-01-01
          • 1970-01-01
          • 2019-06-14
          • 2010-12-20
          相关资源
          最近更新 更多