2014-07-02 94 views
16

我畫一個白色的中風和使用此代碼由屬性指定顏色的圓圈:透明背景的UIView的drawRect圈

- (void)drawRect:(CGRect)rect { 

    CGContextRef contextRef = UIGraphicsGetCurrentContext(); 

    CGContextClearRect(contextRef, rect); 

    // Set the border width 
    CGContextSetLineWidth(contextRef, 1.5); 

    // Set the circle fill color to GREEN 
    CGFloat red, green, blue, alpha; 
    BOOL didConvert = [_routeColor getRed:&red green:&green blue:&blue alpha:&alpha]; 

    CGContextSetRGBFillColor(contextRef, red, green, blue, 1.0); 

    // Set the cicle border color to BLUE 
    CGContextSetRGBStrokeColor(contextRef, 255.0, 255.0, 255.0, 1.0); 

    // Fill the circle with the fill color 
    CGContextFillEllipseInRect(contextRef, rect); 

    // Draw the circle border 
    CGContextStrokeEllipseInRect(contextRef, rect); 
} 

我回來的圖像看起來是這樣的:

enter image description here

如何去除黑色?

+0

建議 - 擺脫調用'CGContextSetRGBFillColor'和'CGContextSetRGBStrokeColor'的。相反,請執行以下操作:'[_routeColor setFill]; [[UIColor whiteColor] setStroke];'。 FYI - 顏色值需要在0.0 - 1.0的範圍內,因此所有的255.0值都應該爲1.0。 – rmaddy

回答

28

將視圖的backgroundColor設置爲[UIColor clearColor]

請注意,只有在創建視圖時才需要設置背景顏色一次。

+5

要添加到此答案 - 在自定義視圖的'init'方法中設置背景顏色,而不是在'drawRect:'中。 – rmaddy

+0

謝謝@rmaddy,我在回答中添加了一條註釋。 – user3386109

8

我需要這個。當我設置這個,工作。

self.opaque = NO; 
3

這個工作對我的斯威夫特3:

self.isOpaque = false 
self.backgroundColor = UIColor.clear 
0

您需要的背景顏色設置爲clearColor在初始化。

這裏是例子

-(id)initWithCoder:(NSCoder*)aDecoder 
{ 
    self = [super initWithCoder:aDecoder]; 

    if(self) 
    { 
     self.backgroundColor = [UIColor clearColor]; 
    } 

    return self; 
} 

- (void)drawRect:(CGRect)rect { 

    CGContextRef contextRef = UIGraphicsGetCurrentContext(); 

    CGContextClearRect(contextRef, rect); 

    // Set the border width 
    CGContextSetLineWidth(contextRef, 1.5); 

    // Set the circle fill color to GREEN 
    CGFloat red, green, blue, alpha; 
    BOOL didConvert = [_routeColor getRed:&red green:&green blue:&blue alpha:&alpha]; 

    CGContextSetRGBFillColor(contextRef, red, green, blue, 1.0); 

    // Set the cicle border color to BLUE 
    CGContextSetRGBStrokeColor(contextRef, 255.0, 255.0, 255.0, 1.0); 

    // Fill the circle with the fill color 
    CGContextFillEllipseInRect(contextRef, rect); 

    // Draw the circle border 
    CGContextStrokeEllipseInRect(contextRef, rect); 
}