extension UIImage {
/// - Description: returns tinted image
/// - Parameters:
/// - qualityMultiplier: when treating SVG image we need to enlarge the image size in order to preserve quality. The smaller the original SVG is compared to desired UIImage frame, the bigger multiplier should be.
/// - Returns: Tinted image
func withTintColor(_ color: UIColor, qualityMultiplier: CGFloat = 15) -> UIImage? {
UIGraphicsBeginImageContextWithOptions(CGSize(width: size.width * qualityMultiplier, height: size.height * qualityMultiplier), false, scale)
// 1 We create a rectangle equal to the size of the image
let drawRect = CGRect(x: 0,y: 0,width: size.width * qualityMultiplier,height: size.height * qualityMultiplier)
// 2 We set a color and fill the whole space with that color
color.setFill()
UIRectFill(drawRect)
// 3 We draw an image over the space with a blend mode of .destinationIn, which is a mode that treats the image as an image mask
draw(in: drawRect, blendMode: .destinationIn, alpha: 1)
let tintedImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return tintedImage
}
7条答案
按热度按时间dsekswqp1#
如果
SVG
在Assets.xcassets
中,你可以告诉Xcode将图像视为图标:首先,在资产目录中选择
SVG
映像然后设置渲染模式为模板图像
的数据
uttx8gqw2#
Swift
使用Swift更改SVG的颜色:
字符串
的数据
bvuwiixz3#
这对我很有效:
字符串
记住把图片添加到
assets
文件夹。我希望它能帮助你。hfwmuf9z4#
在发布iOS 14.0+时,我使用了谷歌orihpt的answer,但我意识到我必须做一些与这里其他答案不同的额外步骤。当使用
Image
时,我无法让tintColor
工作,但foregroundColor
对我来说很好。我不知道你是否针对整个图像,但这个解决方案只针对SVG路径,而不是在图像上创建背景颜色(类似于Marcy的output图像)。字符串
ryhaxcpt5#
做下面的事可能对你有用。
字符串
wqsoz72f6#
SWIFT 5.X解决方案主要用于从Web动态加载SVG图像:
注意:虽然此解决方案也适用于从
Assets
文件夹加载的图像和.svg
类型以外的图像。字符串
}
ffdz8vbo7#
试试这个[self.badmintonImgView setTintColor:[UIColor redColor]];