绘制带有核心图形的羽毛圆圈

时间:2013-11-12 20:59:42

标签: ios core-graphics

使用核心图形,我如何绘制一个羽化圆圈,增加alpha值朝向中心?像这样:

enter image description here

理想情况下,颜色,圆半径和α强度都是参数。

2 个答案:

答案 0 :(得分:2)

这在我的一些应用程序中对我有用。柔软度为0-1。您需要自己制作宽度和宽度(正方形)的CGBitmapContext。

// make a path:
self.shapePath = CGPathCreateMutable();
CGPathAddEllipseInRect(self.shapePath, NULL, CGRectMake(0, 0, width, width));
CGFloat radius = width / 2.0f;        
NSInteger innerRadius = (softness < 0.01f ? (NSInteger)radius : (NSInteger)ceil((1.0f - softness) * radius));
NSInteger outerRadius = (NSInteger)ceil(radius);
CGFloat alphaStep = MAX(0.0059f, (1.0f / ((outerRadius - innerRadius) + 1)));
CGFloat outerMultiplier = 1.0f / (2.0f * (CGFloat)outerRadius);

for (NSInteger i = outerRadius; i >= innerRadius; --i)
{
    CGContextSaveGState(bitmapContext);
    UIColor* c = [UIColor.whiteColor colorWithAlphaComponent:alphaStep];
    CGContextTranslateCTM(bitmapContext, outerRadius - i, outerRadius - i);
    CGFloat scale = (2.0f * (CGFloat)i) * outerMultiplier;
    CGContextScaleCTM(bitmapContext, scale, scale);
    CGContextSetFillColorWithColor(bitmapContext, c.CGColor);
    CGContextAddPath(bitmapContext, self.shapePath);
    CGContextEOFillPath(bitmapContext);
    CGContextRestoreGState(bitmapContext);
}

答案 1 :(得分:1)

您可以使用核心图形CGGradientRefCGContextDrawRadialGradient()函数,也可以使用核心图像CIRadialGradient过滤器。您使用哪一个取决于您的需求。