使图片显示成相应颜色的方法
2017-06-14 本文已影响18人
Matt_Yuen
把图片直接渲染成相应的颜色(此方法我是定义在UIImage的类别中的)
/**
把UIImage对象渲染成相应的颜色
@param color 颜色
@return UIImage对象
*/
- (UIImage *)tintColor:(UIColor *)color
{
UIGraphicsBeginImageContextWithOptions(self.size, NO, self.scale);
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextTranslateCTM(context, 0, self.size.height);
CGContextScaleCTM(context, 1.0, -1.0);
CGContextSetBlendMode(context, kCGBlendModeNormal);
CGRect rect = CGRectMake(0, 0, self.size.width, self.size.height);
CGContextClipToMask(context, rect, self.CGImage);
[color setFill];
CGContextFillRect(context, rect);
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return newImage;
}
最开始,我是使用另外一种方式将图片显示成需求颜色的,如下:
//下面只是创建可以一个ImageView,在上面显示一张图片,需求是将图片显示成orange颜色
UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
imageView.center = self.view.center;
//***需要设置imageView的'tintColor'属性为最终渲染颜色
imageView.tintColor = [UIColor orangeColor];
[self.view addSubview:imageView];
//对于image来说,也需要设置一个相应的属性才能最终显示成需求颜色
//即'imageWithRenderingMode:'方法
UIImage *image = [UIImage imageNamed:@"ic_contact_list_hint"];
image = [image imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
//设置imageView的'image'属性即可
imageView.image = image;
个人看来,还是直接用第一种方法来的更加直观一些,也不需要设置那么多的属性,比较方便,当然具体的区别和适用场景没有研究过,还请大家多指点。