ios - 如何向上下文添加透明渐变蒙版

标签 ios quartz-2d

我正在使用 quartz 2d 绘制饼图。

我使用图层在底部绘制了饼图的倒影。

我想为反射添加一个透明的 alpha 渐变,使其变得越来越透明,直到它变得不可见。

有人有想法吗?

@编辑:更多细节 我的饼图在 CGLayerRef 中。

我首先将这一层绘制到 CGContextRef。 然后我做一个

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

颠倒过来。

然后我重新绘制图层

提前致谢

洛奇

最佳答案

您需要使用图像 mask 。您可以通过在位图上下文中绘制渐变来制作蒙版:

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

(如果您不使用 ARC,请删除 __bridge。)

然后你可以在绘制图像之前使用 mask :

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

完成后不要忘记松开 mask 。

关于ios - 如何向上下文添加透明渐变蒙版,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8236375/

相关文章:

iphone - iOS:通过捏合来缩放 UITextView?

iphone - 如何使用 NSDateFormatter 查看 "Today"字符串

ios - Z方向UIView旋转?

iphone - 如何在一个圆圈中定位和裁剪 UIImage

ios - 着色图像会忽略 alpha channel ——为什么以及如何解决?

android - 如何在 flutter google map 网络服务插件中获取当前位置?

iphone - 在 UIScrollView 内部时 UITableView 滚动问题

objective-c - iOS - 如何使用无序的 CGPoints 绘制特定的 CGPath

cocoa - 将一个 UIView 的绘制内容复制到另一个 UIView

iphone - iOS AVAudioPlayer 让其他应用的背景音乐停止