2014-01-26 81 views
0

下面的代碼繪製了以下代碼。與右側相比,人們可以注意到左側線有細線。其他觀察四棱曲線並不那麼尖銳。 如何讓它看起來更好?CoreGraphics繪圖校正

- (void)drawRect:(CGRect)rect 
{  
    CGContextRef contextRef=UIGraphicsGetCurrentContext(); 
    [self drawBatteryEdges:contextRef withFinalBorderRect:rect]; 
} 

-(void) drawBatteryEdges:(CGContextRef) contectRef withFinalBorderRect:(CGRect) batteryRect{ 
    CGFloat topOffset=20.0f; 
    CGFloat bottomOffset=20.0f; 
    CGFloat curveOffset=4f; 

    CGMutablePathRef path=CGPathCreateMutable(); 
    CGPathMoveToPoint(path, NULL, 0, topOffset); 
    CGPathAddQuadCurveToPoint(path, NULL, batteryRect.size.width/2.0, topOffset-(curveOffset), batteryRect.size.width, topOffset); 
    CGPathAddLineToPoint(path, NULL, batteryRect.size.width, batteryRect.size.height-bottomOffset); 
    CGPathAddQuadCurveToPoint(path, NULL, 
           batteryRect.size.width/2.0, (CGPathGetCurrentPoint(path).y)+(curveOffset), 
           0, (CGPathGetCurrentPoint(path).y)); 

    CGPathCloseSubpath(path); 

    CGContextAddPath(contectRef, path); 
    CGContextDrawPath(contectRef, kCGPathStroke); 

} 

它繪製如下。

enter image description here

回答

0

Wenderlich,雷。 「核心圖形教程:線條,矩形和漸變。」 4月15日2013年 http://www.raywenderlich.com/32283/core-graphics-tutorial-lines-rectangles-and-gradients

嗯,事實證明,當核芯顯卡招的路徑,它吸引 上的筆觸路徑的精確邊緣的中間。

在你的情況下,路徑的邊緣是你想要填充的矩形。 因此,當沿着該邊緣繪製1條像素線時,該線的一半(1/2 像素)將位於該矩形的內側,而該線的另一半(1/2像素)將位於該矩形的內側在矩形外面。

但當然,因爲沒有辦法畫1/2像素,而不是核心 顯卡採用抗混疊在兩個像素畫,但只是一個打火機 陰涼處給的外觀,這只是一個單一的像素繪製。

但是你不想要任何抗鋸齒,你只需要一個像素,darnit! 有幾種方法來解決這個問題:

  • 您可以使用裁剪切出不良像素
  • 您可以禁用抗鋸齒,也修改矩形邊界,以確保行程是你想要
  • 所以它採用1/2像素的效果考慮您可以修改的路徑,行程

我建議在半像素,這將涉及做得升繪製你的行程IKE在此:

CGRectMake(rect.origin.x + 0.5, rect.origin.y + 0.5, rect.size.width - 1, rect.size.height - 1); 
+1

你也可以使用'CGPathCreateCopyByTransformingPath(路徑,轉換)'翻譯的完整路徑(0.5,0.5)如果你發現更容易與 –

+0

工作是,那絕對是比加+0.5容易到處。 – andyPaul