【问题标题】:Cannot load PNG image as UIImage无法将 PNG 图像加载为 UIImage
【发布时间】:2015-04-05 20:49:17
【问题描述】:

我正在尝试将位于我的 XCode 项目中的 .PNG 图像加载为 UIImage - 但采用文件名的 UIImage 的构造函数返回 nil

请查看我的设置截图:

这里有一些细节:

  • 项目在 Swift 中
  • 我正在全局变量中构造UIImage(懒惰地)
  • 模拟器和设备 (iPhone 5S) 上存在问题
  • 我已经多次添加同一张图片,但名称不同,以确保不是错误命名的原因(请参阅左侧红色矩形中的所有名称)
  • 所有图片都添加到EasyTypeShared目标,这是一个嵌入runeable EasyType项目的库项目。
  • 我没有执行任何附加步骤 - 只是将图像文件添加到我的工作区(以及 EasyTypeShared 目标)并运行应用程序

编辑:根据this blog,原因可能是工作区设置 - 更准确地说是框架正在加载图像。不确定,但由于缺乏更好的想法,我会遵循这条路线。如果您能对此事有所了解,我将非常感谢您提出任何想法。

【问题讨论】:

  • 仅仅因为你可以在 Xcode 中看到文件并不意味着它在你的包中。
  • @HotLicks 我需要做什么才能将它添加到捆绑包中?我认为使用这个特定的 UIImage 构造函数不需要额外的步骤(比如将其添加到包中)。
  • 选择图像并确保图像在文件检查器中选择了“目标成员”。
  • 只需添加一个资产目录并将您的图像放在那里
  • 如图所示,图像文件有一些奇怪的名称。您至少需要:ImagePlaceholder.png 和 ImagePlaceholder@2x.png(如果您打算使用 iPhone 6Plus,还可能需要 ImagePlaceholder@3x.png)。确保文件不在真实文件夹中(库是真实文件夹吗?),而不是在文件资源管理器中也显示为文件夹的分组

标签: ios swift uiimage png


【解决方案1】:

问题是由于从资源加载图像的代码驻留在框架中。主包不包含框架的资源,需要使用相应的包。工作代码:

private let imagePlaceholder = UIImage(named: "ImagePlaceholder.png", inBundle: NSBundle(forClass: CarretMoveController.self)

【讨论】:

    【解决方案2】:

    这些是 images.xcassets 的一部分吗?如果不是,则必须使用 NSBundle 读取它们并获取资源的路径/URL 以及所有这些以及简单的文件名是不够的。

    您可以按照 Apple 文档 here 将文件添加到资产中。相关部分可能是“添加图像集”。

    如果您没有 images.xcassets,您可以根据here 给出的答案之一将其添加到您的项目中。

    【讨论】:

      【解决方案3】:

      在您的项目资源管理器中,我可以看到图像命名不正确。 应该是这样的:

      imagePlaceHolder.png
      imagePlaceHolder@2x.png
      

      注意文件名末尾的 png 和文件扩展名前的 @2x。

      【讨论】:

      • 只是重命名为ImagePlaceholder@2x.png 似乎不起作用。 @HotLicks 写了一些关于将其添加到 bunde 的内容。也许这就是问题所在?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-04
      • 2017-10-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多