Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

like image 785
Mr Ordinary Avatar asked Jan 05 '13 08:01

Mr Ordinary


1 Answers

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.

like image 103
jrturton Avatar answered Sep 22 '22 11:09

jrturton