1.下面这段代码可以更改图片的颜色,但是只能更为只用颜色.比如你是灰色的图片,你想更改为红色或是其他颜色都可以用如下代码实现:
import UIKit
extension UIImage {
func imageWithTintColor(tintColor:UIColor, blendMode:CGBlendMode) -> UIImage {
UIGraphicsBeginImageContextWithOptions(self.size, false, 0.0)
tintColor.setFill()
let bounds = CGRectMake(0, 0, self.size.width, self.size.height)
UIRectFill(bounds)
self.drawInRect(bounds, blendMode: blendMode, alpha: 1.0)
if blendMode != .DestinationIn {
self.drawInRect(bounds, blendMode: .DestinationIn, alpha: 1.0)
}
let tintedImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return tintedImage
}
}
2.直接在需要更给图片颜色的控制器中直接使用:
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var imageV: UIImageView!
override func viewDidLoad() {
super.viewDidLoad()
let img = UIImage(named: "图片")?.imageWithTintColor(UIColor.redColor(), blendMode: .Overlay)
imageV.image = img
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
3.好吧你只要使用如上代码就可以实现图片更改颜色了.
4.什么?你告诉我苹果官方有个更简单的改变图片的颜色属性。
UIImageRenderingModeAlwaysTemplate 是UIImage渲染模式renderingMode枚举类型中的其中一个,除去这个外还有另外两个
UIImageRenderingModeAutomatic // 根据图片的使用环境和所处的绘图上下文自动调整渲染模式(默认属性)。
UIImageRenderingModeAlwaysOriginal // 始终绘制图片原始状态,设置Tint Color属性无效。
UIImageRenderingModeAlwaysTemplate // 始终根据Tint Color绘制图片(颜色)显示,忽略图片的颜色信息(也就是图片原本的东西是不显示的)。
调用此属性
UIImage *image = [UIImage imageNamed:@"111.jpg"];
image = [image imageWithRenderingMode: UIImageRenderingModeAlwaysTemplate];
有何用处
个人经常用到的有两种
A
美工切出来一个返回按钮 颜色是黄色 但有一个页面需要这个返回按钮是红色 那就没必要美工再切一张红色的按钮,而是利用UIImageRenderingModeAlwaysTemplate这个属性把黄色按钮改成红色
例 代码
UIImage *image = [UIImage imageNamed:@"111.jpg"];
image = [image imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
UIImageView *imageView = [[UIImageView alloc]initWithFrame:CGRectMake(100, 100, 100, 100)];
imageView.image = image;
imageView.tintColor = [UIColor purpleColor];
[self.view addSubview:imageView];
B
UIButton 的点击状态 因为UIButton设置背景色 点击UIButton 是没有点击色的 但是UIButton的背景图片有点击色 那就可以利用UIImageRenderingModeAlwaysTemplate这个属性改变任意一张图片的颜色为我们需要的那个颜色
例 代码
UIImage *image = [UIImage imageNamed:@"111.jpg"];
image = [image imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
UIButton *btn = [[UIButton alloc]initWithFrame:CGRectMake(0, 0, 100, 100)];
btn.tintColor = [UIColor brownColor];
[btn setBackgroundImage:image forState:UIControlStateNormal];
[self.view addSubview:btn];