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

Posted

技术标签:

【中文标题】使用 Core Graphics 绘制圆弧时绘制的额外线【英文标题】:Extra line drawn when drawing an arc with Core Graphics 【发布时间】:2014-01-16 12:02:16 【问题描述】:

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

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

这是我的代码:

//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);

请原谅我糟糕的英语。

【问题讨论】:

删除CGContextAddArc之后的CGContextClosePath(context); 当我删除它时,我得到link。 【参考方案1】:

圆弧底部的水平线是由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);

对不起我糟糕的法语;-)

【讨论】:

对不起,我有最后一个问题:当我尝试填充我的矩形时,它只填充弧而不填充矩形:link。我怎样才能填满整个矩形?

以上是关于使用 Core Graphics 绘制圆弧时绘制的额外线的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Core Graphics / Quartz 2D 中绘制圆角矩形?

绘制圆弧

122.绘制圆弧

使用 Core Graphics 绘制 UIImage?

如何使用 Core Graphics 绘制点?

如何使用 Core Graphics 绘制箭头?