美文网首页iOS开发.
获取对应的颜色图片

获取对应的颜色图片

作者: 侭情显現 | 来源:发表于2019-05-10 17:17 被阅读0次

开发过程中.经常遇到要一张图片能从一个颜色过渡到另一个颜色的场景:
如: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];
    }

以上即可获取

相关文章

网友评论

    本文标题:获取对应的颜色图片

    本文链接:https://www.haomeiwen.com/subject/xxtzoqtx.html