如何用模糊颜色填充MKCircleRenderer

时间:2016-12-01 12:43:08

标签: ios uiblureffect

我已经实现了MKCircleRenderer的自定义实现。我需要一个带有附加颜色enter image description here的圆圈。我可以用特定的颜色填充它。但是如何添加模糊效果?

这是我的代码:

- (void)fillPath:(CGPathRef)path inContext:(CGContextRef)context_{

    if(!distance)
        return;

    @synchronized (self) {
        if(!image){
            rect = CGPathGetBoundingBox(path);

            UIGraphicsBeginImageContext(rect.size);
            CGContextRef context = UIGraphicsGetCurrentContext();

            CGContextAddPath(context, path);
            CGContextSetBlendMode (context, kCGBlendModePlusDarker);
            CGContextClip(context);

            CGFloat gradientLocations[2] = {0, 1.0f};
            UIColor* color = [UIColor colorWithHTMLString:@"#27B255"];

            const CGFloat* components = CGColorGetComponents(color.CGColor);
            CGFloat gradientColors[8] = {components[0], components[1], components[2], 0.3, components[0], components[1], components[2], 0.3};
            CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
            CGGradientRef gradient = CGGradientCreateWithColorComponents(colorSpace, gradientColors, gradientLocations, 2);
            CGColorSpaceRelease(colorSpace);

            CGPoint gradientCenter = CGPointMake(CGRectGetMidX(rect), CGRectGetMidY(rect));
            CGFloat gradientRadius = MIN(rect.size.width, rect.size.height) / 2;

            CGContextDrawRadialGradient(context, gradient, gradientCenter, 0, gradientCenter, gradientRadius, kCGGradientDrawsAfterEndLocation);

            CGGradientRelease(gradient);

            if(distance.accuracy > 0){
                CGFloat k = (CGFloat)(rect.size.width/(2*(distance.distance + distance.accuracy)));
                CGFloat radius = (distance.distance - distance.accuracy) * k;

                if(radius > 0){
                    CGContextSetFillColorWithColor(context, [UIColor clearColor].CGColor);
                    CGContextSetBlendMode(context, kCGBlendModeClear);
                    CGContextAddArc(context, CGRectGetMidX(rect), CGRectGetMidY(rect), radius, 0, 2 * M_PI, 0);
                    CGContextDrawPath(context, kCGPathFill);
                    CGContextSetBlendMode(context, kCGBlendModeNormal);
                }
            }

            image = UIGraphicsGetImageFromCurrentImageContext();

            image = [UIImageEffects imageByApplyingBlurToImage:image withRadius:1 tintColor:nil saturationDeltaFactor:1.0 maskImage:nil];

            UIGraphicsEndImageContext();
        }
    }

    CGContextDrawImage(context_, rect, image.CGImage);
}

我使用Apple的UIImageEffects类,但没有我期望的结果。你能提供其他varian怎么做?

0 个答案:

没有答案