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】:

不是直接回答这个问题,但我在UIImageViewUIButton 的扩展中设置图像时也得到了一个蓝色圆圈。 对我来说,使用 alwaysOriginal 渲染图像就可以了。

let image = UIImage(named:"placeholder")?.withRenderingMode(.alwaysOriginal)
button.setImage(image, for: .normal)

【讨论】:

以上是关于swift UIImage蓝色方块的主要内容,如果未能解决你的问题,请参考以下文章

在 UIImage 中按顺序移动方块

使用 UIImage 或 Code 绘制高亮蓝色

Swift 从两个 UIImage 并排生成单个 UIImage

将 UIImage 转换为 NSData 并在 Swift 中转换回 UIImage?

Swift:创建 UIImage 数组

将UIImage转换为NSData并在Swift中转换回UIImage?