【问题标题】:How to add a transparent gradient mask to a context如何将透明渐变蒙版添加到上下文
【发布时间】:2011-11-23 01:47:36
【问题描述】:

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

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

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

有人有想法吗?

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

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

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

倒过来。

然后我重新绘制我的图层

提前致谢,

洛伊克

【问题讨论】:

    标签: ios quartz-2d


    【解决方案1】:

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

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

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

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

    完成后别忘了松开面具。

    【讨论】:

    • 我不明白如何将您所说的应用到我的上下文或 CGLayerRef 中?
    • 我以为你在使用 CALayer。我改变了答案。
    • WHOUAAAAAAAAAAAAAAAAAAA 正是我要找的东西 :) :):) 非常感谢 :) 工作得很好:)
    猜你喜欢
    • 2013-02-19
    • 2012-01-12
    • 2014-06-23
    • 2014-03-03
    • 1970-01-01
    • 1970-01-01
    • 2013-03-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多