Color Superposition UIButton Imagen

Tengo este problema al intentar superponer una image de UIButton con un color.

El color de la superposition aparece debajo de la Image .

Aquí está el código que tengo en mi método drawRect (tengo el UIButton subclasificado):

 (void)drawRect:(CGRect)rect { CGRect bounds = self.imageView.bounds; CGContextRef context = UIGraphicsGetCurrentContext(); CGContextSetFillColorWithColor(context, [UIColor networkingColor].CGColor); CGContextTranslateCTM(context, 0.0, self.imageView.image.size.height); CGContextScaleCTM(context, 1.0, -1.0); CGContextClipToMask(context, bounds, [self.imageView.image CGImage]); CGContextFillRect(context, bounds); } 

¿Alguna idea sobre cómo get el color rojo en la parte superior de la Image ?

Sucedió con este código hacky:

 - (void)drawRect:(CGRect)rect { UIImage* img = [self imageForState:UIControlStateNormal]; [self setImage:nil forState:UIControlStateNormal]; CGRect bounds = self.imageView.bounds; CGContextRef context = UIGraphicsGetCurrentContext(); CGContextSetFillColorWithColor(context, [UIColor colorWithRed:1 green:0 blue:0 alpha:0.2].CGColor); CGContextDrawImage(context, bounds, img.CGImage); CGContextFillRect(context, bounds); } 

Parece que la image se dibuja después de drawRect, así que a less que lo hagas nulo, va encima de lo que dibujes allí.

Esta es la solución no es definitiva. Lo editaré con lo que llegue a continuación.

EDITAR: la solución correcta es agregar una UIView semitransparente en la parte superior de la image como esta:

 - (id)initWithFrame:(CGRect)frame { self = [super initWithFrame:frame]; if (self) { UIView* tintView = [[UIView alloc] initWithFrame:self.bounds]; tintView.backgroundColor = [UIColor colorWithRed:1 green:0 blue:0 alpha:0.2]; tintView.userInteractionEnabled = NO; [self addSubview:tintView]; } return self; } - (id)initWithCoder:(NSCoder *)aDecoder { self = [super initWithCoder:aDecoder]; if (self) { UIView* tintView = [[UIView alloc] initWithFrame:self.bounds]; tintView.backgroundColor = [UIColor colorWithRed:1 green:0 blue:0 alpha:0.2]; tintView.userInteractionEnabled = NO; [self addSubview:tintView]; } return self; } 

Nota: debe hacer esto en su subclass UIButton.