最近一直在研究怎么减少资源文件,如果产品童鞋要用不同颜色的图片展示不同的状态,状态 A 是绿色的,状态 B 是红色的,状态 C 是黄色,图案都是一样的,只是颜色不同,也许你会让设计童鞋切3张图,但这种方式不太优雅。

有两种方案:一个是使用 tintColor,可以简单的实现更换颜色;如果这个方法不能满足需求,可以使用绘制的方式,可选参数会多很多。喵神之前发表过一篇文章——《iOS中使用blend改变图片颜色》很是受用,虽然发表时间有点早,但我个人觉得还是比较实用。

我们可以使用 UIImage-drawInRect:blendMode:alpha: 方法,封装后一行代码搞定你想要的任何颜色,直接上代码:

运行效果如图:

kCGBlendModeDestinationIn 是保留透明度信息;但如果图片中有阴影就需要与 kCGBlendModeOverlay 或者 kCGBlendModeMultiply 或其它参数根据实际情况叠加使用。

喵神已经把原理讲解的很详细了,感兴趣的童鞋可以移步:https://onevcat.com/2013/04/using-blending-in-ios/