2013-03-31 61 views
2

我試圖繪製一個UIView一個簡單的圓形。我知道我可以QuartzCore做,但我想用drawRect方法:爲什麼顏色透明試圖繪製的drawRect一個彩色圓圈是什麼時候?

- (void)drawRect:(CGRect)rect 
{ 
    CGContextRef ctx = UIGraphicsGetCurrentContext(); 
    CGContextAddEllipseInRect(ctx, rect); 
    CGContextSetFillColor(ctx, CGColorGetComponents([[UIColor greenColor] CGColor])); 
    CGContextFillPath(ctx); 
} 

上面的代碼,當我設置[UIColor whiteColor]不起作用。當[UIColor whiteColor]視圖將成爲透明..

爲什麼視圖變得透明時,顏色是白色的?我如何繪製一個白色的圓圈?

回答

3

CGContextSetFillColor狀態的文檔的第二參數如下:

強度值的數組描述的顏色來設置。數組元素的數量必須等於當前填充顏色空間中的組件數量,以及alpha值的附加組件。

greenColor來自RGB顏色空間。但是whiteColor不是。所以當你使用whiteColor時,你最終會傳遞錯誤的顏色分量。

一個更容易的解決辦法是更換:

CGContextSetFillColor(ctx, CGColorGetComponents([[UIColor greenColor] CGColor])); 

有:

[[UIColor greenColor] set]; 

或:

[[UIColor whiteColor] set]; 

更新:

另一種選擇,如果你真的想到Core Graphics,是:

CGContextSetFillColorWithColor(ctx, [UIColor greenColor].CGColor); 
1

您遇到由於色彩空間不匹配的問題。您正在繪製到上下文已默認的,RGBA色彩空間,它需要四個組件(紅,藍,綠,阿爾法)的輸入。但是當你與[的UIColor whiteColor]一的UIColor,這種顏色與灰度色彩空間,它給你只有兩個部件(白色,阿爾法)創建的。因此,將一個顏色空間的值插入不同的顏色空間會導致意想不到的後果。

所以,你要麼需要與CGContextSetFillColorSpace()的情況下的色彩空間更改爲灰度色彩空間...

,或者你可以簡單地使用簡單的方法CGContextSetFillColorWithColor(),它發生在任何一個CGColor色彩空間並適用於上下文,無論CGColor的色彩空間如何。

- (void) drawRect:(CGRect)rect { 
    CGContextRef ctx = UIGraphicsGetCurrentContext(); 
    CGContextAddEllipseInRect(ctx, rect); 
    CGContextSetFillColorWithColor(ctx, [UIColor whiteColor].CGColor); 
    CGContextFillPath(ctx); 
} 
相關問題