现在存在的问题
如果一个APP中可以根据用户喜好,更改APP中图片的颜色,则设计师必须重复修改图片,开发者图片文件重命名、移动和导入无用功较多,下载安装包较大。
解决方案
用blending给这张图片加上另一个纯色作为tint,并保持原来的alpha通道,然后结合Core Graphics。步骤如下:
1.创建一个上下文用以画新的图片
2.将新的tintColor设置为填充颜色
3.将原图片画在创建的上下文中,并用新的填充色着色(注意保持alpha通道)
4.从当前上下文中取得图片并返回
代码示例
UIImage+tint
|
|
ViewController
|
|
注:用kCGBlendModeOverlay能保留灰度信息,用kCGBlendModeDestinationIn能保留透明度信息。
因为每次使用UIImage+tint的方法绘图时,都使用了CG的绘制方法,这就意味着每次调用都会是用到CPU的Offscreen drawing,大量使用的话可能导致性能的问题。对于这里的UIImage+tint的实现,可以写一套缓存的机制,来确保大量重复的元素只在load的时候blend一次,之后将其缓存在内存中以快速读取。这是一个权衡的问题,在时间和空间中做出正确的平衡和选择是程序设计的乐趣所在。