2013-03-29 44 views
2

使用重疊的不同顏色繪製相同形狀時,出現問題。在啓用對生成的透明像素進行抗鋸齒滲透並導致如this image中的僞像時。她正在繪製一個紅色的圓圈,繪製一個藍色的三角形,然後繪製一個紅色的三角形。在使用不同顏色的drawRect中繪製重疊形狀時,會啓用邊緣滲色

此問題可以通過禁用反鋸齒解決,但結果是醜陋的鋸齒狀邊緣。

是否有例如解決方案,我可以追溯性地對圖像上下文進行反向別名或渲染圖像和反鋸齒。或其他任何可以幫助我繪製邊緣清晰的重疊形狀的東西。

這裏是重現問題

-(void)drawRect:(CGRect)rect 
{ 
CGContextRef currentContext = UIGraphicsGetCurrentContext(); 
CGContextClearRect(currentContext, rect); 
CGContextSetAllowsAntialiasing(currentContext, YES); 

//// Color Declarations 
UIColor* color = [UIColor redColor]; 
UIColor* color2= [UIColor blueColor]; 

//// Oval Drawing 
UIBezierPath* ovalPath = [UIBezierPath bezierPathWithOvalInRect: rect]; 
[color setFill]; 
[ovalPath fill]; 

//// triangle Drawing 
UIBezierPath* trianglePath = [UIBezierPath bezierPath]; 
[trianglePath moveToPoint: CGPointMake(0, 0)]; 
[trianglePath addLineToPoint: CGPointMake(rect.size.width, rect.size.height)]; 
[trianglePath addLineToPoint: CGPointMake(0, rect.size.height)]; 
[trianglePath addLineToPoint: CGPointMake(0, 0)]; 
[trianglePath closePath]; 
[color2 setFill]; 
[trianglePath fill]; 

[color setFill]; 
[trianglePath fill]; 
} 

回答

1

的問題是,與drawRect中,你基本上是在圖像上繪製代碼,每次抽獎方法呈現較前一個。沒有撲殺。

要真正解決這個問題,您可能希望使用OpenGL,其中只有一個渲染過程,因此不會呈現隱藏的對象。

+0

謝謝,我在openGL中設置了相同的圖形,它解決了我的問題,即使啓用了多重採樣,也沒有可見的邊緣出血。 – TimPelgrim

相關問題