获取对应的颜色图片
开发过程中.经常遇到要一张图片能从一个颜色过渡到另一个颜色的场景:
如:UIViewController上下滑动时.返回按钮从白色变为黑色.
-(UIImage *)getCurrentProgressImageWithImage:(UIImage *)image startColor:(UIColor *)startColor endColor:(UIColor *)endColor progress:(CGFloat)progress{
NSArray * marginArray = [self transColorBeginColor:startColor andEndColor:endColor];
UIColor * currentColor = [self getColorWithColor:UIColor.blueColor andCoe:progress andMarginArray:marginArray];
image = [image imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
CGRect rect = CGRectMake(0,0, image.size.width, image.size.height);
UIGraphicsBeginImageContext(rect.size);
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextClipToMask(context, rect, image.CGImage);
CGContextSetFillColorWithColor(context, [currentColor CGColor]);
CGContextFillRect(context, rect);
UIImage *img = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
UIImage *flippedImage = [UIImage imageWithCGImage:img.CGImage scale:1.0 orientation: UIImageOrientationDownMirrored];
return flippedImage;
}
-
(NSArray *)getRGBDictionaryByColor:(UIColor *)originColor
{
CGFloat r=0,g=0,b=0,a=0;
if ([self respondsToSelector:@selector(getRed:green:blue:alpha:)]) {
[originColor getRed:&r green:&g blue:&b alpha:&a];
}
else {
const CGFloat *components = CGColorGetComponents(originColor.CGColor);
r = components[0];
g = components[1];
b = components[2];
a = components[3];
}return @[@(r),@(g),@(b)];
}
-
(NSArray *)transColorBeginColor:(UIColor *)beginColor andEndColor:(UIColor *)endColor {
NSArray<NSNumber *> *beginColorArr = [self getRGBDictionaryByColor:beginColor];
NSArray<NSNumber *> *endColorArr = [self getRGBDictionaryByColor:endColor];return @[@([endColorArr[0] doubleValue] - [beginColorArr[0] doubleValue]),@([endColorArr[1] doubleValue] - [beginColorArr[1] doubleValue]),@([endColorArr[2] doubleValue] - [beginColorArr[2] doubleValue])];
}
-
(UIColor *)getColorWithColor:(UIColor *)beginColor andCoe:(double)coe andMarginArray:(NSArray<NSNumber *> *)marginArray {
NSArray *beginColorArr = [self getRGBDictionaryByColor:beginColor];
double red = [beginColorArr[0] doubleValue] + coe * [marginArray[0] doubleValue];
double green = [beginColorArr[1] doubleValue]+ coe * [marginArray[1] doubleValue];
double blue = [beginColorArr[2] doubleValue] + coe * [marginArray[2] doubleValue];return [UIColor colorWithRed:red green:green blue:blue alpha:1.0f];
}
以上即可获取