objective-c uiimage uibutton mask layer

objective c - ¿Cómo implementar el resaltado en UIImage como lo hace UIButton cuando se pulsa?



objective-c mask (1)

Necesito replicar el efecto que el UIButton hace en una imagen cuando se toca, el resaltado. Ver:

El original PNG es un cuadrado con fondo alfa. Cuando lo configuro como imagen de UIButton, se aplica automáticamente un efecto en los píxeles no alfa de la imagen.

¿Cómo hacer este efecto?


Podrías lograr esto con una categoría simple en UIImage:

@interface UIImage (Tint) - (UIImage *)tintedImageUsingColor:(UIColor *)tintColor; @end @implementation UIImage (Tint) - (UIImage *)tintedImageUsingColor:(UIColor *)tintColor { UIGraphicsBeginImageContextWithOptions(self.size, NO, self.scale); CGRect drawRect = CGRectMake(0, 0, self.size.width, self.size.height); [self drawInRect:drawRect]; [tintColor set]; UIRectFillUsingBlendMode(drawRect, kCGBlendModeSourceAtop); UIImage *tintedImage = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); return tintedImage; } @end

Para el efecto que se muestra arriba, pasaría algo como [UIColor colorWithWhite:0.0 alpha:0.3] como el parámetro tintColor (experimento con el valor alfa).