我无法找到一个合适的解决方案,因此需要一个快速的解决方法。以下是一个函数,给定UIImage,返回一个新图像,该图像使用深色alpha填充变暗。上下文填充命令可以替换为其他绘制或填充例程,以提供不同类型的变暗。
这个函数没有优化,并且是用最少的图形API知识制作的。
您可以使用此功能设置UIControlStateHighlighted状态图像,以便至少变暗。
+ (UIImage *)darkenedImageWithImage:(UIImage *)sourceImage
{
UIImage * darkenedImage = nil;
if (sourceImage)
{
CGImageRef source = sourceImage.CGImage;
CGRect drawRect = CGRectMake(0.f,
0.f,
sourceImage.size.width,
sourceImage.size.height);
CGContextRef context = CGBitmapContextCreate(NULL,
drawRect.size.width,
drawRect.size.height,
CGImageGetBitsPerComponent(source),
CGImageGetBytesPerRow(source),
CGImageGetColorSpace(source),
CGImageGetBitmapInfo(source)
);
CGContextDrawImage(context, drawRect, source);
CGContextSetBlendMode(context, kCGBlendModeOverlay);
CGContextSetRGBFillColor(context, 0.f, 0.f, 0.f, 0.5f);
CGContextFillRect(context, drawRect);
CGImageRef darkened = CGBitmapContextCreateImage(context);
CGContextRelease(context);
darkenedImage = [UIImage imageWithCGImage:darkened
scale:1.f
orientation:sourceImage.imageOrientation];
CGImageRelease(darkened);
}
return darkenedImage;
}