是否可以在iPhone上的路径中绘制渐变?CGPath中的CGGradient
我正在寻找一个替代Mac OS X的方法
-(void)drawInBezierPath:(NSBezierPath *)path relativeCenterPosition:(NSPoint)relativeCenterPosition of NSGradient.
是否可以在iPhone上的路径中绘制渐变?CGPath中的CGGradient
我正在寻找一个替代Mac OS X的方法
-(void)drawInBezierPath:(NSBezierPath *)path relativeCenterPosition:(NSPoint)relativeCenterPosition of NSGradient.
我认为像这样将工作:
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);
是的,我是这么认为的,如果我明白你的问题。它参与了一点,但这里是做一个很好的例子:
http://cocoawithlove.com/2008/09/drawing-gloss-gradients-in-coregraphics.html
这是用可可和可可没有做触摸,但它的一切BU NSColor转换。您必须改用UIColor。基本上,你必须创建一个渐变功能,然后使用:
CGShadingCreateAxial()
确定您的渐变的值。
或者你想要有一个梯度线?
THX很多托德! 我已经有相同的代码,但我忘了CGContextAddPath后的CGContextClip .... – catlan 2010-04-03 17:06:19
我试图理解此代码,但“颜色”被声明两次不同类型。我不确定在随后的调用中使用哪一个。 – progrmr 2010-04-17 01:01:34
progrmr,它的错字,应该是: CGColorRef colorRef [] = {topColor,bottomColor}; (NULL,(const void **)colorRef,sizeof(colorRef)/ sizeof(CGColorRef),&kCFTypeArrayCallBacks); – digdog 2010-10-08 21:27:22