UIImageView tintColor 设置,无论如何都不对图像应用颜色

Posted

技术标签:

【中文标题】UIImageView tintColor 设置,无论如何都不对图像应用颜色【英文标题】:UIImageView tintColor set, not applying color to image anyway 【发布时间】:2018-09-11 03:59:20 【问题描述】:

我的应用中有一个 UIImageView 显示静态图像。图像在资产管理器中设置为始终模板。这是在运行时捕获接口时的检查器:

似乎正在设置 tintColor,但没有应用(或其他什么??)。以下是来自上述同一面板的可访问性信息:

我尝试使用this question 修复它,但它不会改变外观。这是我正在使用的代码(嵌套在 layoutSubview 中):

// mode is always set to `.alwaysTemplate` and the below branch
// never executes.
let mode = promptImageView?.image?.renderingMode
if mode != .alwaysTemplate 
    if let image = promptImageView?.image 
        let newImage = image.withRenderingMode(.alwaysTemplate)
        promptImageView!.image = newImage
    

【问题讨论】:

Using Tint color on UIImageView的可能重复 我已经更新了这个问题来回复这篇我之前实际尝试过的帖子。 你需要提供你在上面代码中没有设置的色调 @HardikThakkar 它是在设置多个视图的 .tintColor 属性的属性中的以下行中设置的。 【参考方案1】:

这似乎是Interface Builder和代码之间的错误。将tintColor设置为相同颜色时,不止一次,它不会在运行时更改为目标颜色。在这里,我通过更改 Interface Builder 中的颜色来修复它,因为 .tintColor 是在视图出现之前设置的。

已通过将.xib 文件中的颜色更改为预期颜色以外的颜色进行修复。这里我把它从白色改成了棕色:

【讨论】:

【参考方案2】:

试试这个代码,如果不需要,删除所有其他条件检查

imgBG.image = imgBG.image!.withRenderingMode(.alwaysTemplate)
imgBG.tintColor = UIColor.red

【讨论】:

【参考方案3】:

您应该删除条件并使用实例生成图像并提供您想要设置的色调颜色。

 if let image = promptImageView?.image 
    let newImage = image.withRenderingMode(.alwaysTemplate)
    promptImageView!.image = newImage
    self.promptImageView.tintColor = .red

【讨论】:

【参考方案4】:
self.image!.withRenderingMode(UIImageRenderingMode.alwaysTemplate)
self.image.tintColor = UIColor.red

此反射仅在运行时显示在输出上,当您捕获页面静态图像时仅显示

【讨论】:

【参考方案5】:

使用以下代码设置图像色调。

extension UIImage


    func tintWithColor(_ color:UIColor)->UIImage
    

        UIGraphicsBeginImageContextWithOptions(self.size, false, UIScreen.main.scale);
        //UIGraphicsBeginImageContext(self.size)
        let context = UIGraphicsGetCurrentContext()

        // flip the image
        context?.scaleBy(x: 1.0, y: -1.0)
        context?.translateBy(x: 0.0, y: -self.size.height)

        // multiply blend mode
        context?.setBlendMode(.multiply)

        let rect = CGRect(x: 0, y: 0, width: self.size.width, height: self.size.height)
        context?.clip(to: rect, mask: self.cgImage!)
        color.setFill()
        context?.fill(rect)

        // create uiimage
        let newImage = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()

        return newImage!

    


像这样使用它:

imageView.image = UIImage(named: "image")?.tintWithColor(color)

【讨论】:

以上是关于UIImageView tintColor 设置,无论如何都不对图像应用颜色的主要内容,如果未能解决你的问题,请参考以下文章

设置Image渲染模式使用TintColor

如何在UIButton中保持tintColor然后点击这个?

如何将 tintColor 保留在 UIButton 中然后单击它?

滚动UITableView时,UIImageViews变黑

设置后如何删除 Image 组件的 tintColor ?

将 TintColor 设置为 MKAnnotationView 图像