• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ios - 如何在 iOS 中使用渐变创建叠加颜色

[复制链接]
菜鸟教程小白 发表于 2022-12-12 18:09:07 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

背景信息:我有一个 UIImageView。我通过以下方式在其图像上添加了叠加颜色:

UIGraphicsBeginImageContext(initialImage.size);
[initialImage drawInRect:CGRectMake(0, 0, initialImage.size.width, initialImage.size.height) blendMode:kCGBlendModeNormal alpha:alphaValue];
UIBezierPath * path = [UIBezierPath bezierPathWithRect:CGRectMake(0, 0, initialImage.size.width, initialImage.size.height)];
[overlayColor setFill];
[path fillWithBlendMode:kCGBlendModeMultiply alpha:1];
finalImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

[self setImage:finalImage];

我仍然想将其添加为叠加颜色,但我希望它具有渐变色。我一直在想办法做到这一点,但并没有真正成功。我想,添加带有渐变的叠加颜色的方法是错误的?我不确定如何做到这一点。我试图将 CGGradientLayer 作为 sublayer 添加到 UIImageView 但它不起作用。

我想过添加一个 UIView 并将其设置为 backgroundColor 作为 overlayColor 然后添加一个 CGGradientLayer 作为UIViewsublayer 作为 subview 添加到 UIImageView 但是,我们不应该添加 subview UIImageViews

有人可以帮我解决这个问题吗?也许我应该改变我的方法?

为我指明正确的方向也很棒!

如果这篇文章没有完全清楚,我期待您的回复和道歉!

提前感谢您的帮助!

编辑:CGGradientLayer

的代码
CAGradientLayer *gradient = [CAGradientLayer layer];
gradient.frame = self.frame;

UIColor *colorOne = [UIColor colorFromHex:self.feedColor withAlphaalphaValue * 0.7)];
UIColor *colorTwo = [UIColor colorFromHex:self.feedColor withAlphaalphaValue * 1.0)];

gradient.colors = [NSArray arrayWithObjectsid)colorOne.CGColor, (id)colorTwo.CGColor, nil];

[self.layer insertSublayer:gradient atIndex:0];



Best Answer-推荐答案


我会使用 Core Graphics 来获取您的输入图像,对其应用渐变叠加,然后将其传递到 UIImageView。这样的事情应该可以达到预期的效果:

- (UIImage *)imageWithGradientOverlayUIImage *)sourceImage color1UIColor *)color1 color2UIColor *)color2 gradPointACGPoint)pointA gradPointBCGPoint)pointB {

    CGSize size = sourceImage.size;

    // Start context
    UIGraphicsBeginImageContext(size);
    CGContextRef c = UIGraphicsGetCurrentContext();

    // Draw source image into context
    CGContextDrawImage(c, (CGRect){CGPointZero, size}, sourceImage.CGImage);

    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
    CGFloat gradLocs[] = {0, 1};
    NSArray *colors = @[(id)color1.CGColor, (id)color2.CGColor];

    // Create a simple linear gradient with the colors provided.
    CGGradientRef grad = CGGradientCreateWithColors(colorSpace, (__bridge CFArrayRef)colors, gradLocs);
    CGColorSpaceRelease(colorSpace);

    // Draw gradient with multiply blend mode over the source image
    CGContextSetBlendMode(c, kCGBlendModeMultiply);
    CGContextDrawLinearGradient(c, grad, pointA, pointB, 0);
    CGGradientRelease(grad);

    // Grab resulting image from context
    UIImage *resultImg = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    return resultImg;
}

这里 sourceImage 是输入图像,color1color2 是您的渐变颜色,gradPointAgradPointB 是您的线性渐变端点(在 Core Graphics 坐标系中,左下角为 (0,0))。

这样您就不必再弄乱图层了。如果您经常用不同的颜色重新绘制,那么您可能需要采用使用图层的方法。

关于ios - 如何在 iOS 中使用渐变创建叠加颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34768956/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap