2010-04-01 70 views
4

是否可以在iPhone上的路徑中繪製漸變?CGPath中的CGGradient

我正在尋找一個替代Mac OS X的方法

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

回答

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

THX很多託德! 我已經有相同的代碼,但我忘了CGContextAddPath後的CGContextClip .... – catlan 2010-04-03 17:06:19

+0

我試圖理解此代碼,但「顏色」被聲明兩次不同類型。我不確定在隨後的調用中使用哪一個。 – progrmr 2010-04-17 01:01:34

+0

progrmr,它的錯字,應該是: CGColorRef colorRef [] = {topColor,bottomColor}; (NULL,(const void **)colorRef,sizeof(colorRef)/ sizeof(CGColorRef),&kCFTypeArrayCallBacks); – digdog 2010-10-08 21:27:22

1

是的,我是這麼認爲的,如果我明白你的問題。它參與了一點,但這裏是做一個很好的例子:

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

這是用可可和可可沒有做觸摸,但它的一切BU NSColor轉換。您必須改用UIColor。基本上,你必須創建一個漸變功能,然後使用:

CGShadingCreateAxial() 

確定您的漸變的值。

或者你想要有一個梯度線?