iOS Developer

使图片显示成相应颜色的方法

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;

个人看来,还是直接用第一种方法来的更加直观一些,也不需要设置那么多的属性,比较方便,当然具体的区别和适用场景没有研究过,还请大家多指点。

上一篇下一篇

猜你喜欢

热点阅读