¿Cómo teñiría una imagen programáticamente en el iPhone?

Me gustaría teñir una imagen con una referencia de color. Los resultados deben verse como el modo de fusión Multiplicar en Photoshop, donderopa blanca sería reemplazado portinte:

Estaré cambiando el valor del color continuamente.

Seguir: Yo pondría el código para hacer esto en el método drawRect de mi ImageView, ¿verdad?

Como siempre, unfragmento de código ayudaría mucho en mi comprensión, a diferencia de un enlace.

Actualizar: Subclasificando un UIImageView con el códigoRamin sugirió.

Puse esto en viewDidLoad: de mi controlador de vista:

[self.lena setImage:[UIImage imageNamed:kImageName]];
[self.lena setOverlayColor:[UIColor blueColor]];
[super viewDidLoad];

Veo la imagen, pero no está siendo teñida. También intenté cargar otras imágenes, establecer la imagen en IB y llamar a setNeedsDisplay: en mi controlador de vista.

Actualizar: drawRect: no está siendo llamado.

Actualización final: ¡Encontré un proyecto antiguo que tenía un imageView configurado correctamente para poder probar el código de Ramin y funciona como un encanto!

Final, actualización final:

Para aquellos de ustedes que están aprendiendo sobre Core Graphics, aquí está la cosa más simple que podría funcionar.

En tu subcategoría UIView:

- (void)drawRect:(CGRect)rect {

    CGContextRef context = UIGraphicsGetCurrentContext();

    CGContextSetFillColor(context, CGColorGetComponents([UIColor colorWithRed:0.5 green:0.5 blue:0 alpha:1].CGColor)); // don't make color too saturated

    CGContextFillRect(context, rect); // draw base

    [[UIImage imageNamed:@"someImage.png"] drawInRect: rect blendMode:kCGBlendModeOverlay alpha:1.0]; // draw image
}

Respuestas a la pregunta(13)

Su respuesta a la pregunta