OWolf
OWolf

Reputation: 5132

iOS, Draw radial gradient that fills recrangle

The code below draws a perfect elliptical radial gradient, but does not fill in the corners of it's view. How do I get it to draw beyond the edge of the ellipse? The documented option is kCGGradientDrawsAfterEndLocation, but I think it's not available in ios.

- (void)drawRect:(CGRect)rect
{
    CGFloat colors [] = {
        0.2, 0.2, 0.2, 1.0,
        0.0, 0.0, 0.0, 1.0
    };
    CGColorSpaceRef baseSpace = CGColorSpaceCreateDeviceRGB();
    CGGradientRef gradient = CGGradientCreateWithColorComponents(baseSpace, colors, NULL, 2);
    CGColorSpaceRelease(baseSpace), baseSpace = NULL;
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSaveGState(context);
    CGContextAddEllipseInRect(context, rect);
    CGContextClip(context);
    CGContextDrawRadialGradient(context, gradient, self.center, 0, self.center, self.frame.size.width, kCGGradientDrawsAfterEndLocation);
    CGGradientRelease(gradient), gradient = NULL;
    CGContextRestoreGState(context);
}

enter image description here

Upvotes: 6

Views: 3538

Answers (1)

jrturton
jrturton

Reputation: 119292

You've clipped the drawing to the ellipse. That stops the gradient being drawn outside the clipping area. Remove the line where you add the ellipse and clip the context.

Upvotes: 4

Related Questions