UIImageView tintColor 设置,无论如何都不对图像应用颜色
UIImageView tintColor set, not applying color to image anyway
我的应用程序中有一个显示静态图像的 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
}
}
这似乎是 Interface Builder 和代码之间的错误。 将 tintColor 设置为相同颜色时,不止一次,它不会更改为目标颜色运行。在这里,我通过在 Interface Builder 中更改颜色来修复它,因为 .tintColor
是在视图出现之前设置的。
已通过将 .xib
文件中的颜色更改为预期颜色以外的颜色来修复。这里我把它从白色变成了棕色:
尝试此代码,如果不需要则删除所有其他条件检查
imgBG.image = imgBG.image!.withRenderingMode(.alwaysTemplate)
imgBG.tintColor = UIColor.red
您应该删除条件并使用实例生成图像并提供您想要设置的色调。
if let image = promptImageView?.image {
let newImage = image.withRenderingMode(.alwaysTemplate)
promptImageView!.image = newImage
self.promptImageView.tintColor = .red
}
self.image!.withRenderingMode(UIImageRenderingMode.alwaysTemplate)
self.image.tintColor = UIColor.red
此反射仅显示在输出上,而 运行,当您捕获页面静态图像时仅显示
使用下面的代码设置图像色调颜色。
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,但并未应用(或其他??)。这是来自与上述相同面板的辅助功能信息:
我尝试使用 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
}
}
这似乎是 Interface Builder 和代码之间的错误。 将 tintColor 设置为相同颜色时,不止一次,它不会更改为目标颜色运行。在这里,我通过在 Interface Builder 中更改颜色来修复它,因为 .tintColor
是在视图出现之前设置的。
已通过将 .xib
文件中的颜色更改为预期颜色以外的颜色来修复。这里我把它从白色变成了棕色:
尝试此代码,如果不需要则删除所有其他条件检查
imgBG.image = imgBG.image!.withRenderingMode(.alwaysTemplate)
imgBG.tintColor = UIColor.red
您应该删除条件并使用实例生成图像并提供您想要设置的色调。
if let image = promptImageView?.image {
let newImage = image.withRenderingMode(.alwaysTemplate)
promptImageView!.image = newImage
self.promptImageView.tintColor = .red
}
self.image!.withRenderingMode(UIImageRenderingMode.alwaysTemplate)
self.image.tintColor = UIColor.red
此反射仅显示在输出上,而 运行,当您捕获页面静态图像时仅显示
使用下面的代码设置图像色调颜色。
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)