CGRectAddArc的圆角

时间:2016-08-31 02:30:02

标签: ios core-graphics cgcontext cgrect

以下代码绘制路径末端的圆角(绿色)。但是,不是一开始。可以做什么,以便我在开始时也有圆角(红色开始的地方)。它起初并不完美。

enter image description here

-(void)drawRect:(CGRect)rect{


     CGContextRef context = UIGraphicsGetCurrentContext();

    CGFloat arcStartAngle = M_PI;
    CGFloat arcEndAngle = 2 * M_PI;

    CGPoint startPoint = CGPointMake(0,CGRectGetMidY(rect));
    CGPoint endPoint = CGPointMake(CGRectGetMaxX(rect),CGRectGetMidY(rect));

    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();

    CGFloat colors[] =
    {
        1.0, 0.0, 0.0, 1.0,  
        0.0, 1.0, 0.0, 1.0
    };

    CGGradientRef gradient = CGGradientCreateWithColorComponents(colorSpace, colors, NULL, 2);

    CGColorSpaceRelease(colorSpace);



    CGMutablePathRef arc = CGPathCreateMutable();

    CGPathMoveToPoint(arc, NULL, startPoint.x, startPoint.y);


    CGPoint arcCenter = CGPointMake(CGRectGetMidX(rect), CGRectGetMidY(rect));
    CGFloat radius = CGRectGetMidX(rect);

    CGPathAddArc(arc, NULL, arcCenter.x, arcCenter.y, radius-5.0,
                 arcStartAngle, arcEndAngle, NO);



    CGPathRef strokedArc = CGPathCreateCopyByStrokingPath(arc, NULL, 10.0f,
                                                          kCGLineCapRound, kCGLineJoinRound, 10.0f);


    CGContextSaveGState(context);

    CGContextAddPath(context, strokedArc);
    CGContextClip(context);

    CGContextDrawLinearGradient(context, gradient, startPoint, endPoint, 0);

    CGContextDrawPath(context, kCGPathFillStroke);

    CGGradientRelease(gradient);
    CGContextRestoreGState(context);


}

1 个答案:

答案 0 :(得分:1)

我一直在研究你的问题,这就是我所发现的。 您的问题与您的开始路径点有关

CGPathMoveToPoint(arc, NULL, startPoint.x, startPoint.y);

但是对于你的例子,你需要从startPoint.x + 5开始,因为你使用10个宽度的路径,所以你需要修改这一行并使用它来代替

CGPathMoveToPoint(arc, NULL, startPoint.x + 5, startPoint.y);

现在应该有效,这是结果

enter image description here

我希望这会对你有所帮助。