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
备注
imageView
是 UIImageView
在我的测试中,包含或排除 .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 显示的主要内容,如果未能解决你的问题,请参考以下文章
Swift 3:UIImage 设置为模板图像并更改色调颜色时不显示图像