背景信息:我有一个 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
作为UIView
的 sublayer
作为 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];
我会使用 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
是输入图像,color1
和 color2
是您的渐变颜色,gradPointA
和gradPointB
是您的线性渐变端点(在 Core Graphics 坐标系中,左下角为 (0,0))。
这样您就不必再弄乱图层了。如果您经常用不同的颜色重新绘制,那么您可能需要采用使用图层的方法。
关于ios - 如何在 iOS 中使用渐变创建叠加颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34768956/
欢迎光临 OStack程序员社区-中国程序员成长平台 (https://ostack.cn/) | Powered by Discuz! X3.4 |