2011-11-23 67 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