2014-09-20 121 views
2

我在UIView drawRect函數中繪製一個形狀,該函數涉及剪裁路徑,然後在其後添加彩色塊,以便顏色具有剪切路徑的形狀。但是,由於某種原因,路線不會順利出現;如果抗鋸齒功能無法正常工作。CGContextClip反鋸齒問題

CGContextSetStrokeColorWithColor(context, [UIColor clearColor].CGColor); 
CGContextSetLineWidth(context, 1.0); 
CGContextSetShouldAntialias(context, true); 
CGContextSetAllowsAntialiasing(context, true); 
CGContextBeginPath (context); 
CGContextMoveToPoint(context, xStart, yStart); 
for (int i=0; i<points.count; i++) { 
     CGContextAddLineToPoint(context, xPoint, yPoint); 
    } 

} 
CGContextAddLineToPoint(context, xStart, yStart); 
CGContextClip(context); 

CGRect colorRect = CGRectMake(0, 0 , rectWidth, rectHeight); 
CGContextSetFillColorWithColor(context, blockColor.CGColor); 
CGContextFillRect(context, colorRect); 
CGContextRestoreGState(context); 

結果應該具有流暢的線條,但它出來鋸齒狀可見像素作爲這個形象:

Image of the jagged line

任何想法是什麼問題,如何解決?

在此先感謝

+0

您正在繪製直方圖,不是嗎? – kelin 2014-09-23 12:43:49

+0

是的,它的直方圖 – Spinoxa 2014-09-23 21:23:33

回答

0

Okey。所以,你的代碼沒有問題。問題在於抗鋸齒工作有點不同。你繪製一個垂直斜坡,期望得到的直方圖的邊緣將被平滑。但實際上,抗鋸齒並不能使得到的數字更平滑。它與路徑元素(曲線,線條)一起工作。所以,例如,如果你畫一個圓,它的邊將被平滑。

您的問題有一個簡單的解決方案:創建一個曲線,包含直方圖。將其添加到您的上下文中。它會更光滑。

對不起,英語不好。

+0

我會探討這一點,但你錯了如何組成圖表...這些不是酒吧或垂直斜坡,他們應該是線條,但像素邊界上像酒吧呈現 – Spinoxa 2014-09-24 17:26:15

+0

好吧,無論如何,他們是分開的線路。你有多少點在陣列中? – kelin 2014-09-25 09:57:44