2014-01-16 275 views
1

我目前在使用核心圖形進行自定義繪製時遇到問題。當我嘗試繪製一種具有圓形邊框的矩形時,我得到了一條我不想要的額外線條。我讀過文檔,它說當你畫一個弧時,它會畫出一條直線到弧的起點。但我沒有成功找到避免這條線路的解決方案。這裏是一個事先知情同意: enter image description here用Core Graphics繪製圓弧時繪製的額外線條

所以我想,以避免在這上面灰線,我弧下

這裏是我的代碼:

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

請原諒我的英語不好。

+2

刪除'CGContextClosePath(上下文);'後'CGContextAddArc'。 – bobnoble

+0

當我刪除它,我得到[鏈接](http://imgur.com/yO7fD39)。 – Hugo

+0

請參閱下面的答案。 – bobnoble

回答

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

對不起,我可憐的法國;-)

+0

非常感謝bobnoble.It解決了我的問題 – Hugo

+0

Im'對不起,我有一個最後一個問題:當我嘗試填充我的矩形時,它只填充圓弧而沒有提交矩形:[link](http://imgur.com/ZAkV22j)。我怎麼能填充整個rectange? – Hugo

+0

已更新答案以顯示如何填充整個路徑。 – bobnoble