UIImage 不使用 Swift 显示

Posted

技术标签:

【中文标题】UIImage 不使用 Swift 显示【英文标题】:UIImage not displaying using 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 文件中移到项目本身中 【参考方案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

备注

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

【讨论】:

【参考方案5】:

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

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

【讨论】:

我的 Swift SpriteKit 项目自动包含一个 Assets.xcassets 图像管理器。在这里,我写了关于从这些图像构造 Sprite 或 SKSpriteNodes 的文章:***.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 的高度,可能在代码或情节提要中更高。

【讨论】:

以上是关于UIImage 不使用 Swift 显示的主要内容,如果未能解决你的问题,请参考以下文章

UIImage 不使用 Swift 显示

Swift 3:UIImage 设置为模板图像并更改色调颜色时不显示图像

我不知道如何将 UILabel 转换为 UIImage.[swift] [重复]

UIImage 显示为不透明的正方形(IOS Swift)

在 Swift 中使用自定义类在数组中显示 UIImage

没有 UIImageView 的 UIImage 的反射