I am planing to create a four point gradient, pictured below, by drawing two linear gradients via core graphics and masking between them with a third black and white linear gradient.
Is there a more efficient way to draw a four point gradient using core graphics, or other?
Use gradients as color fills that blend smoothly from one color to another. Use a CSS gradient anywhere that you can use an image, such as for the background of an element, an element border, or a mask.
You use a gradient layer to create a color gradient containing an arbitrary number of colors. By default, the colors are spread uniformly across the layer, but you can optionally specify locations for control over the color positions through the gradient.
Draw four circles:
Apply radial transparent gradient:
Result:
Notes:
You can save the mask gradient when you use a CGBlendMode. It's just harder to control the exact colors. But if that's not important for you, it could be a little more efficient in terms of lines of code and maybe also in terms of performance.
Here's an example with some random colors and CGBlendModeExclusion (CGBlendModeDifference gives you a similar effect)
- (void) drawRect:(CGRect)rect
{
CGContextRef ctx = UIGraphicsGetCurrentContext();
CGContextSetBlendMode(ctx, kCGBlendModeExclusion);
CGColorSpaceRef space = CGColorSpaceCreateDeviceRGB();
CGFloat col1[8] = {
1.0, 0.0, 0.0, 1.0,
0.0, 0.0, 1.0, 1.0
};
CGGradientRef grad1 = CGGradientCreateWithColorComponents (space, col1, NULL, 2);
CGContextDrawLinearGradient(ctx, grad1, CGPointMake(0, 0), CGPointMake(0, 320), 0);
CGFloat col2[8] = {
1.0, 0.5, 0.0, 1.0,
0.0, 1.0, 0.0, 1.0
};
CGGradientRef grad2 = CGGradientCreateWithColorComponents (space, col2, NULL, 2);
CGContextDrawLinearGradient(ctx, grad2, CGPointMake(0, 0), CGPointMake(320, 0), 0);
CGGradientRelease(grad1);
CGGradientRelease(grad2);
CGColorSpaceRelease(space);
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With