swift UIImage蓝色方块
Posted
技术标签:
【中文标题】swift UIImage蓝色方块【英文标题】:swift UIImage blue square 【发布时间】:2017-03-30 13:05:42 【问题描述】:我有一个项目,我尝试使用 .setImage 调用的任何图像都显示蓝色方块而不是图像。
sender.setImage(UIImage(named: "o.png"), for: [])
print(sender.tag)
非常感谢任何帮助
编辑:我忘了说这是为 IBAction 内的按钮设置图像
【问题讨论】:
sender 是 UIButton 的类,对吧?sender
是什么?
我有 9 个按钮,每个按钮都有一个唯一的标签。打印发件人打印标签名称
也就是说,按钮是发件人
糟糕的睡眠剥夺大声笑 - 打印 sender.tag 打印按钮的标签
【参考方案1】:
几件事。我从未见过setImage
与空状态数组一起使用。即使文档说“如果未指定状态,将使用 Normal”,请尝试明确说明您希望应用图像的状态:
尝试这样做:
// let's make sure sender is really a button
if let aButton = sender as? UIButton
if let nonBlueImage = UIImage(named: "o.png")
aButton.setImage(nonBlueImage, for: [.normal, .selected, .highlighted])
else
print("couldn't find o.png")
else
print("suprise, sender wasn't really a button")
【讨论】:
谢谢,明确说明是最佳做法。如果您使用 [] 而不是使用 UI 状态进行设置,它仍然有效,但需要先在情节提要中的按钮上初始化图像。【参考方案2】:基本: UIButton
不能像 UIImageView
那样直接设置。您必须定义在UIButton
的哪个状态下设置图像。即使你想为UIButton
设置标题,你也必须像下面这样定义按钮状态
sender.setImage(<your_image>, for: .normal)
所以用下面几行替换你的代码并尝试
sender.setImage(UIImage(named: "o.png"), for: .normal)
希望对你有帮助。
【讨论】:
谢谢,这行得通。在尝试此操作之前,我为其中一个按钮分配了图像,而不是在尝试在 ViewController.swift 中设置图像之前将其留空。然后我能够删除图像,现在可以在代码中设置图像......所以我想它需要在 (your_image for []) 工作之前用图像初始化,但它也可以工作【参考方案3】:当您尝试访问的图像不是.png
格式时,会发生这种情况。
否则该图像根本不存在于捆绑包中。
【讨论】:
这是一次,但在这种情况下,图像位于捆绑包中并采用 .png 格式 好的@froggomad 分享正确答案,如果你得到。在此先感谢:)。 最佳答案功能为我们做到了;)【参考方案4】:点击后发件人状态变为选中状态。
所以请清除发件人的色调
否则
sender.setImage(UIImage(named: "o.png"), for: .normal)
【讨论】:
【参考方案5】:你应该设置 UIControlState 而不是 []。
例如,如果您想将图像更改为 UIButton 的正常状态,
那么应该使用 .normal 而不是 []。
例如:sender.setImage(UIImage(named: "o.png"), for: .normal)
您可以只使用 .selected、.highlighted 之类的。
请参考这个网址。 https://developer.apple.com/reference/uikit/uicontrolstate
【讨论】:
【参考方案6】:试试这段代码,它会起作用的
let image = UIImage(named:"o")?.withRenderingMode(.alwaysOriginal)
sender.setImage(UIImage(named: image), for: .normal)
【讨论】:
【参考方案7】:使用setBackgroundImage
属性而不是setImage
属性。它会工作:
sender.setBackgroundImage(UIImage(named: "o.png"), for: .normal)
【讨论】:
【参考方案8】:不是直接回答这个问题,但我在UIImageView
和UIButton
的扩展中设置图像时也得到了一个蓝色圆圈。
对我来说,使用 alwaysOriginal
渲染图像就可以了。
let image = UIImage(named:"placeholder")?.withRenderingMode(.alwaysOriginal)
button.setImage(image, for: .normal)
【讨论】:
以上是关于swift UIImage蓝色方块的主要内容,如果未能解决你的问题,请参考以下文章
Swift 从两个 UIImage 并排生成单个 UIImage