6

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

OWolf
  • 5,012
  • 15
  • 58
  • 93

1 Answers1

4

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.

jrturton
  • 118,105
  • 32
  • 252
  • 268