CGPath中的CGGradient

时间:2010-04-01 20:05:05

标签: iphone cocoa cocoa-touch core-graphics

是否可以在iPhone上的路径中绘制渐变?

我正在寻找mac os x方法的替代品

-(void)drawInBezierPath:(NSBezierPath *)path relativeCenterPosition:(NSPoint)relativeCenterPosition of NSGradient.

2 个答案:

答案 0 :(得分:12)

我觉得这样的事情会奏效:

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);

答案 1 :(得分:1)

是的,如果我理解你的问题,我想是的。这有点牵扯,但这是一个很好的例子:

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

这是通过Cocoa完成的,而不是Cocoa Touch,但它可以转换为NSColor的所有内容。你必须使用UIColor。基本上,您必须创建一个渐变函数,然后使用:

CGShadingCreateAxial()

确定渐变的值。

或者你想要一条带渐变的线?