Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

CGGradient in an CGPath

Is it possible to draw a gradient in a path on the iPhone?

I'm looking for a replacement of the mac os x method

-(void)drawInBezierPath:(NSBezierPath *)path relativeCenterPosition:(NSPoint)relativeCenterPosition of NSGradient.
like image 860
catlan Avatar asked Dec 13 '22 22:12

catlan


2 Answers

I think something like this will work:

CGContextSaveGState(c);
CGContextAddPath(c, path);
CGContextClip(c)

// make a gradient
CGColorRef colors[] = { topColor, bottomColor };
CFArrayRef colorsArr = CFArrayCreate(NULL, (const void**)colors, sizeof(colors) / sizeof(CGColorRef), &kCFTypeArrayCallBacks);

CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGGradientRef gradient = CGGradientCreateWithColors(colorSpace, colorsArr, NULL);
CFRelease(colorSpace);
CFRelease(colorsArr);

//  Draw a linear gradient from top to bottom
CGPoint start = ...
CGPoint end = ...
CGContextDrawLinearGradient(c, gradient, start, end, 0);

CFRelease(gradient);
CGContextRestoreGState(c);
like image 125
Todd Ditchendorf Avatar answered Jan 03 '23 02:01

Todd Ditchendorf


Yes, I think so if I understand your question. It is a bit involved but here is a good example of doing it:

http://cocoawithlove.com/2008/09/drawing-gloss-gradients-in-coregraphics.html

This is done with Cocoa and not Cocoa Touch but it translates with everything bu NSColor. You have to use UIColor instead. Basically, you have to create a gradient function and then use:

CGShadingCreateAxial()

to determine the value of your gradient.

Or are you wanting to have a line with a gradient?

like image 33
Steven Noyes Avatar answered Jan 03 '23 00:01

Steven Noyes