【问题标题】:UIImage not displaying using SwiftUIImage 不使用 Swift 显示
【发布时间】:2014-06-04 08:20:49
【问题描述】:

用 Swift 编写的用于显示 UIImages 的代码可以在 iOS 8.0 模拟器中运行,但由于某种原因不能在运行 IOS 7.0 的手机上运行。

let image1 = UIImage(named: "img1")
let imageview = UIImageView(image: image1)
self.view.addSubview(imageview)

let image2 = UIImage(named: "img2")
let button = UIButton(frame: CGRect(origin: CGPoint(x: 0, y: 100), size: image2.size)
button.setImage(image2, forState: UIControlState.Normal)
self.view.addSubview(button)

图像位于正确的位置,尺寸正确,参考有效,只是没有显示,除非在运行 iOS 8 的模拟器上。

这是其他人的问题吗?

编辑: 从 Images.xcassets 中删除,清理项目并将文件复制到包本身似乎对我有用。

【问题讨论】:

  • 尝试将“img1”改为“img1.png”(添加图片类型)
  • 设置imageview的框架
  • 我也遇到了 Swift 和 UIImages 的问题。由于某种原因,在使用 Objective-C 和 Swift 的项目中,当加载 UIImage(named: ...) 并在 iOS 7.1.1 上运行应用程序时,无法从应用程序包中找到 UIImages。
  • 我按照编辑说明进行操作。需要注意“清理项目”是必需的。仅仅构建和运行是不够的。我的 iPhone 5 运行的是 iOS7.1.1,我还必须将图像从 xcassets 文件中移到项目本身中

标签: ios uiimage swift


【解决方案1】:

为了显示图像,您必须按以下方式更改代码

let image1 = UIImage(named: "img1.jpg")
let imageview = UIImageView(image: image1)
self.view.addSubview(imageview)

let image2 = UIImage(named: "img2.jpg")
let button = UIButton(frame: CGRect(origin: CGPoint(x: 0, y: 100), size: image2.size)
button.setImage(image2, forState: UIControlState.Normal)
self.view.addSubview(button)

记住 swift 不支持 .png 格式的图片,它支持 .jpg 格式。

【讨论】:

  • PNG 在 Swift 中工作,对我来说,在 Images.xcassets 中不行。
  • Swift 在 playground 中都支持,如果是 PNG,则需要 let image1 = UIImage(named: "img1"),如果是 jpg,则需要 let image1 = UIImage(named: "img1. jpg")
  • 这是解决images.xcassets定义图片扩展名问题的正确方法。警告:如果您将图像添加为 images.xcassets 的一部分以及解决方案的不同文件夹中,您实际上是在项目中添加了 2 个相同的图像,从长远来看,这对您的应用不利。跨度>
  • 答案没有明确说明发生了什么变化。所改变的只是.jpg 已添加到每个文件名的末尾。由于三个原因,代码不再在 Swift 5 中编译。我将添加一个在下面编译的版本。
【解决方案2】:

您将检查图像是否已添加到您的框架中,如果未选中则无法加载资源,但如果您选中它,则会加载图像

【讨论】:

    【解决方案3】:

    我在 iOS 8-Simulator 和我的 iOS 7 设备上尝试了您的代码,它完成了它应该做的事情。所以不,就我而言,我没有看到问题。

    我将 img1 更改为 img1.JPG(文件名),将 img2 更改为 img2.png。我将图像直接复制到视图控制器所在的文件夹中..

    【讨论】:

    • 一部 iPhone 5,正如我所说的 iOS7(这个答案需要更多字符..:D
    • 您的项目使用的是哪个基础 SDK?
    • iOS 8 SDK 和部署目标是 iOS 7.0。但是您必须使用 iOS 8 SDK 才能快速,不是吗?
    • 据我所知,是的。我的设置是相同的,但它仍然不会显示在我的设备上。很奇怪
    • 啊.. 所以将图像复制到主文件夹只有在从 images.xcassets 中删除它之后才能工作。我猜xcassets是问题所在。感谢您的帮助
    【解决方案4】:

    问题的投票与其他答案之间似乎存在脱节,因此我将添加一个关于如何在 Swift 中显示图像的通用答案。无论如何,这就是最初把我带到这里的原因。

    如何在 Swift 中显示图片

    使用UIImage 获取对主包中图像的引用。

    let image = UIImage(named: "rocket.png")
    imageView.image = image
    

    备注

    • imageView 是 UIImageView
    • 在我的测试中,包含或排除 .png 文件扩展名并没有什么不同。不过,如果您使用多种图像格式,则可能需要包含。
    • 同样在我的测试中,图像是直接添加到项目中还是在 Assets.xcassets 中并没有区别。
    • 如果您需要不在主包中的图像,请参阅this question。
    • 根据此处原始问题中的编辑,删除图像并将其重新添加到捆绑包中即可解决问题。

    【讨论】:

      【解决方案5】:

      我将图像存储在“Images.xcassets”文件夹中,我的图像没有出现在我的设备上,但它们确实出现在了模拟器上。为了在我的设备(iPhone 5)上显示“Images.xcassets”图像,对我有用的解决方案是复制“Images.xcassets”文件夹的捆绑资源

      要复制捆绑资源:选择目标>构建阶段>复制捆绑资源>选择“+”(添加项目)>选择“Images.xcassets

      【讨论】:

      • 我的 Swift SpriteKit 项目自动包含一个 Assets.xcassets 图像管理器。在这里,我写了关于从这些图像构造 Sprite 或 SKSpriteNodes 的文章:stackoverflow.com/questions/20480145/…
      【解决方案6】:

      斯威夫特 5:

      由于各种原因,接受的答案不再编译,所以这是我的更新版本:

          let image1 = UIImage(named: "img1.jpg")
          if let myImage1 = image1 {
              let imageview = UIImageView(image: myImage1)
              self.view.addSubview(imageview)
          } else {
              print ("img1 not loaded")
          }
      
          let image2 = UIImage(named: "img2.jpg")
      
          if let myImage2 = image2 {
              let button = UIButton(frame: CGRect(origin: CGPoint(x: 0, y: 100), size: myImage2.size))
              button.setImage(myImage2, for: .normal)
              self.view.addSubview(button)
          } else {
              print ("img2 not loaded")
          }
      

      【讨论】:

        【解决方案7】:

        一个可能的原因是身高。检查 UIImageView 的高度,可能在代码或情节提要中更高。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2015-05-05
          • 1970-01-01
          • 1970-01-01
          • 2012-07-04
          • 1970-01-01
          • 2016-12-16
          • 1970-01-01
          相关资源
          最近更新 更多