如何在UIImage上实现高亮效果,就像UIButton在被点击时所做的那样?

19

我需要复制UIButton在图像上点击时产生的高亮效果。如图:

alt text

原始PNG是一个带有alpha背景的正方形。当我将其设置为UIButton的图像时,自动应用于图像的非alpha像素的效果。

如何实现这种效果?

1个回答

49

你可以使用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

要达成上面所示的效果,您可以将[UIColor colorWithWhite:0.0 alpha:0.3]这样的内容作为tintColor参数传递(尝试更改alpha值)。


1
与 Stack Overflow(SO) 上流传的其他一些解决方案不同,这种方法有一个好处,就是不会给整个矩形着色。UIRectFillUsingBlendMode() 的使用非常恰当。 - Eric G
太棒了。终于找到了答案。:) 谢谢! - Timo
2
为支持RETINA显示: UIGraphicsBeginImageContextWithOptions(self.size, NO, [[UIScreen mainScreen] scale]); - Uladzimir
2
在这里使用 self.scale 会更好。 - omz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接