使用Core Graphics绘制圆弧时绘制的额外线条

时间:2014-01-16 12:02:16

标签: ios objective-c uiview core-graphics quartz-2d

我目前在使用核心图形进行自定义绘图时遇到问题。当我尝试绘制一种带有圆形边框的矩形时,我会得到一条我不想要的额外线条。我已经阅读了文档,它说当你绘制一个弧时,它会画一条线到弧的原点。但我没有成功找到一个可以避免这条线的解决方案。这是一张照片: enter image description here

所以我想在我的弧线下方顶部避开这条灰线

这是我的代码:

//Tracer
    CGContextBeginPath(context);
    CGContextSetStrokeColorWithColor(context, wormBorderColor);
    CGContextSetFillColorWithColor(context, wormFillColor);

    //Tracer la ligne de gauche
    CGContextMoveToPoint(context, leftX, startingY);
    CGContextAddLineToPoint(context, leftX, startingY-wormHeight);
    //CGContextClosePath(context);

    //tracer l'arc supérieur
    CGContextMoveToPoint(context, rightX, startingY-wormHeight);
    CGContextAddArc(context, centerX, startingY-wormHeight, echelleSize/2, 0,M_PI , 1);
    CGContextClosePath(context);

    CGContextAddLineToPoint(context, rightX, startingY);



    //CGContextAddRect(context, CGRectMake(leftX, startingY, rightX-leftX, wormHeight));
    //CGContextClosePath(context);


    CGContextStrokePath(context);

请原谅我可怜的英语。

1 个答案:

答案 0 :(得分:2)

弧底部的水平线由CGContextClosePath引起。要使没有水平线的同一图像改变代码:

//tracer l'arc supérieur
CGContextMoveToPoint(context, rightX, startingY-wormHeight);
CGContextAddArc(context, centerX, startingY-wormHeight, echelleSize/2, 0,M_PI , 1);
CGContextClosePath(context);

CGContextAddLineToPoint(context, rightX, startingY);

为:

//tracer l'arc supérieur
CGContextMoveToPoint(context, rightX, startingY-wormHeight);
CGContextAddArc(context, centerX, startingY-wormHeight, echelleSize/2, 0,M_PI , 1);


CGContextMoveToPoint(context, rightX, startingY-wormHeight);
CGContextAddLineToPoint(context, rightX, startingY);

修改

修改代码以便以可填充的方式绘制路径,并在末尾添加填充。

//Tracer
CGContextBeginPath(context);
CGContextSetStrokeColorWithColor(context, wormBorderColor);
CGContextSetFillColorWithColor(context, wormFillColor);

//Déplacez à l'origine
CGContextMoveToPoint(context, leftX, startingY);

//Tracer la ligne de gauche
CGContextAddLineToPoint(context, leftX, startingY-wormHeight);

//tracer l'arc supérieur - clockwise
CGContextAddArc(context, centerX, startingY-wormHeight, echelleSize/2, 0,M_PI , 0);

//Tracer la ligne de droite
CGContextAddLineToPoint(context, rightX, startingY);

CGContextStrokePath(context);
CGContextFillPath(context);

对不起我可怜的法国人; - )