2011-11-23 102 views
3

我正在使用quartz 2d繪製餅圖。如何將透明漸變蒙版添加到上下文中

我使用圖層來繪製底部餅圖的反射。

我想添加一個透明的alpha漸變到反射,使它變得越來越透明,直到它變得不可見。

有人有想法嗎?

@EDIT:更多詳情 我的餅圖在CGLayerRef中。

我首先將這個圖層繪製到CGContextRef。 然後我做一個

CGContextTranslateCTM(context, 0, rect.size.height); 
CGContextScaleCTM(context, 1.0, -1.0); 

將被顛倒。

然後我畫我的層一個新的時間

由於提前,

盧瓦克

回答

14

您需要使用的圖像掩碼。您可以通過繪製漸變成位圖背景使面膜:(如果你不使用ARC刪除__bridge

CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceGray(); 
CGContextRef gc = CGBitmapContextCreate(NULL, rect.size.width, rect.size.height, 8, rect.size.width, colorSpace, kCGImageAlphaNone); 
CGGradientRef gradient = CGGradientCreateWithColors(colorSpace, (__bridge CFArrayRef)[NSArray arrayWithObjects:(__bridge id)[UIColor whiteColor].CGColor, (__bridge id)[UIColor blackColor].CGColor, nil], NULL); 
CGColorSpaceRelease(colorSpace); 
CGContextDrawLinearGradient(gc, gradient, CGPointMake(0, 0), CGPointMake(0, rect.size.height), 0); 
CGGradientRelease(gradient); 
CGImageRef mask = CGBitmapContextCreateImage(gc); 
CGContextRelease(gc); 

然後你可以用面膜繪製圖像之前:

CGContextTranslateCTM(context, 0, rect.size.height); 
CGContextScaleCTM(context, 1.0, -1.0); 
CGContextClipToMask(context, rect, mask); 

完成後請不要忘記放開面罩。

+0

我不明白我怎麼能應用你說的我的上下文或CGLayerRef? – user789148

+0

我以爲你在使用CALayer。我改變了我的答案。 –

+1

WHOUAAAAAAAAAAAAAAAAA正是我在找的:) :) :)非常感謝:)作品完美無缺:) – user789148