如何在 UIImage 上像 UIButton 一样在点击时实现突出显示?

Posted

技术标签:

【中文标题】如何在 UIImage 上像 UIButton 一样在点击时实现突出显示?【英文标题】:How to implement highlighting on UIImage like UIButton does when tapped? 【发布时间】:2011-06-08 14:08:33 【问题描述】:

我需要复制 UIButton 在点击时对图像的效果,即突出显示。见:

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

这个效果怎么做?

【问题讨论】:

【参考方案1】:

您可以通过 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 值进行实验)。

【讨论】:

与 SO 周围的其他一些解决方案不同,这具有不为整个矩形着色的良好效果。善用 UIRectFillUsingBlendMode() 太棒了。终于找到了这个问题的答案。 :) 谢谢! 对于 RETINA 显示支持:UIGraphicsBeginImageContextWithOptions(self.size, NO, [[UIScreen mainScreen] scale]); 在这里使用self.scale会更好。

以上是关于如何在 UIImage 上像 UIButton 一样在点击时实现突出显示?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 UIButton 中的选定状态下从正常状态和标题文本设置 UIImage

如何在点击时更改作为自定义 UICollectionViewCell 属性的 UIButton 的 UIImage?

UIButton 中像素精确的 UIImage 重采样

如何将手势识别器添加到 UITableViewCell 的 UIImage 和 UIButton?

在 UIImage 和 UIButton 的图像之间创建标识符

在 iOS 中 x 秒后从 UIButton 更改 UIImage