Попробуйте это (категория UIImage):
.h
@interface UIImage (Overlay)
- (UIImage *)imageWithOverlayColor:(UIColor *)color;
@end
.m
#import "UIImage+Overlay.h"
@implementation UIImage (Overlay)
- (UIImage *)imageWithOverlayColor:(UIColor *)color
{
CGRect rect = CGRectMake(0.0f, 0.0f, self.size.width, self.size.height);
if (UIGraphicsBeginImageContextWithOptions) {
CGFloat imageScale = 1.0f;
if ([self respondsToSelector:@selector(scale)]) // The scale property is new with iOS4.
imageScale = self.scale;
UIGraphicsBeginImageContextWithOptions(self.size, NO, imageScale);
}
else {
UIGraphicsBeginImageContext(self.size);
}
// [self drawInRect:rect];
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextTranslateCTM(context, 0, self.size.height);
CGContextScaleCTM(context, 1.0, -1.0);
CGContextSetBlendMode(context, kCGBlendModeMultiply);
CGContextDrawImage(context, rect, self.CGImage);
CGContextSetFillColorWithColor(context, color.CGColor);
CGContextClipToMask(context, rect, self.CGImage);
CGContextFillRect(context, rect);
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return image;
}
@end
Назовите это так:
UIImage *image = [UIImage imageNamed:@"image.png"];
image = [image imageWithOverlayColor:[UIColor redColor]];
Изображения до и после: