CGGradient в CGPath - PullRequest
       12

CGGradient в CGPath

4 голосов
/ 02 апреля 2010

Можно ли нарисовать градиент в пути на iPhone?

Я ищу замену методу Mac OS X

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

Ответы [ 2 ]

12 голосов
/ 02 апреля 2010

Я думаю, что-то вроде этого будет работать:

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 голос
/ 02 апреля 2010

Да, я так думаю, если я понимаю ваш вопрос. Это немного сложно, но вот хороший пример того, как это сделать:

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

Это делается с Какао, а не с Какао Touch, но оно переводится со всем, что NSColor. Вы должны использовать UIColor вместо этого. По сути, вы должны создать градиентную функцию и затем использовать:

CGShadingCreateAxial()

, чтобы определить значение вашего градиента.

Или вы хотите иметь линию с градиентом?

...