我在用swift 4,我的目标是改变系统的颜色。UIImage
在代码中。我用
let defaultImage = UIImage(systemName: "person.circle.fill")
但当我改变其色调与。
let grayDefaultImage = defaultImage?.withTintColor(.gray)
这个... grayDefaultImage
仍然显示标准的蓝色。接下来我使用一个扩展
//MARK: -UIImage extension
extension UIImage {
/// @Todo: this blurs the image for some reason
func imageWithColor(color: UIColor) -> UIImage {
UIGraphicsBeginImageContextWithOptions(self.size, false, self.scale)
color.setFill()
let context = UIGraphicsGetCurrentContext()
context?.translateBy(x: 0, y: self.size.height)
context?.scaleBy(x: 1.0, y: -1.0)
context?.setBlendMode(CGBlendMode.normal)
let rect = CGRect(origin: .zero, size: CGSize(width: self.size.width, height: self.size.height))
context?.clip(to: rect, mask: self.cgImage!)
context?.fill(rect)
let newImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return newImage!
}
}
而且图像呈现的是一种非常 "像素化 "或 "低分辨率 "的形式。
withTintColor(_:) 说。The new image uses the same rendering mode as the original image.
所以如果原始图像的渲染模式是... .alwaysTemplate
你需要将模式设置为 .alwaysOriginal
:
defaultImage?.withTintColor(.gray, renderingMode: .alwaysOriginal)