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

时间:2018-09-11 03:59:20

标签: ios swift cocoa-touch

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

The inspector when selecting the image view.

似乎已设置tintColor,但未应用(或其他操作?)。这是与上述相同的面板中的辅助功能信息:

The accessibility information

我尝试使用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
    }
}

5 个答案:

答案 0 :(得分:1)

这似乎是Interface Builder和代码之间的错误。将tintColor设置为相同的颜色(一次以上)时,它在运行时不会更改为目标颜色。在这里,我通过在Interface Builder中更改颜色来解决了该问题,因为.tintColor是在视图出现之前设置的。

通过将.xib文件中的颜色更改为所需颜色以外的颜色来解决。在这里,我将其从白色更改为棕色:

enter image description here

答案 1 :(得分:0)

尝试使用此代码,并删除所有其他不需要的条件检查

/home/simon

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

self.image!.withRenderingMode(UIImageRenderingMode.alwaysTemplate)
self.image.tintColor = UIColor.red

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

答案 4 :(得分:0)

使用下面的代码设置图像色调颜色。

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)