iOS更改图像颜色的一半

Ahm*_* Z. 2 core-graphics uiimageview uiimage ios

我有一个看起来像这样的图像......

在此输入图像描述

我必须要做的是我必须改变这个图像的下半部分的颜色..就像这一个.. 在此输入图像描述

我尝试过使用CAGradientLayer,Masking但没有运气得到结果..

任何帮助都会很棒..在此先感谢..

更新1

这是他们在这段代码之后得到的东西.我需要补充的一件事是在使用之前调整图像大小.

在此输入图像描述

更新2

在此输入图像描述

haa*_*awa 7

你对我提出了一些很好的挑战,但是你走了:

返回图像的方法,下半部分用一些颜色着色

- (UIImage *)image:(UIImage *)image withBottomHalfOverlayColor:(UIColor *)color
{
    CGRect rect = CGRectMake(0.f, 0.f, image.size.width, image.size.height);

    if (UIGraphicsBeginImageContextWithOptions) {
        CGFloat imageScale = 1.f;
        if ([self respondsToSelector:@selector(scale)])
            imageScale = image.scale;
        UIGraphicsBeginImageContextWithOptions(image.size, NO, imageScale);
    }
    else {
        UIGraphicsBeginImageContext(image.size);
    }

    [image drawInRect:rect];

    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSetBlendMode(context, kCGBlendModeSourceIn);

    CGContextSetFillColorWithColor(context, color.CGColor);

    CGRect rectToFill = CGRectMake(0.f, image.size.height*0.5f, image.size.width, image.size.height*0.5f);
    CGContextFillRect(context, rectToFill);

    UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    return newImage;
}
Run Code Online (Sandbox Code Playgroud)

使用示例:

    UIImage *image = [UIImage imageNamed:@"q.png"];
    image = [self image:image withBottomHalfOverlayColor:[UIColor cyanColor]];
    self.imageView.image = image;
Run Code Online (Sandbox Code Playgroud)

我的结果:在此输入图像描述在此输入图像描述


Cod*_*224 5

在 Swift 4.一些变化

func withBottomHalfOverlayColor(myImage: UIImage, color: UIColor) -> UIImage
  {
    let rect = CGRect(x: 0, y: 0, width: myImage.size.width, height: myImage.size.height)


    UIGraphicsBeginImageContextWithOptions(myImage.size, false, myImage.scale)
    myImage.draw(in: rect)

    let context = UIGraphicsGetCurrentContext()!
    context.setBlendMode(CGBlendMode.sourceIn)

    context.setFillColor(color.cgColor)

    let rectToFill = CGRect(x: 0, y: myImage.size.height*0.5, width: myImage.size.width, height: myImage.size.height*0.5)
    context.fill(rectToFill)

    let newImage = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()

    return newImage!
  }
Run Code Online (Sandbox Code Playgroud)