2014-07-02 4 views
16

Je dessine un cercle avec un trait blanc et une couleur spécifiée par une propriété en utilisant ce code:Arrière-plan transparent UIView drawRect cercle

- (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); 
} 

L'image que je me regarde en arrière comme ceci:

enter image description here

Comment puis-je supprimer le noir?

+0

Suggestion - se débarrasser des appels à '' CGContextSetRGBFillColor' et CGContextSetRGBStrokeColor'. Au lieu de cela, procédez comme suit: '[_routeColor setFill]; [[UIColor whiteColor] setStroke]; '. Et FYI - les valeurs de couleur doivent être comprises entre 0.0 et 1.0, donc toutes vos valeurs 255.0 devraient être 1.0. – rmaddy

Répondre

28

Définissez le backgroundColor de la vue sur [UIColor clearColor].

Notez que la définition de la couleur d'arrière-plan doit uniquement être effectuée une fois, lorsque la vue est créée.

+5

Pour ajouter à cette réponse - définissez la couleur d'arrière-plan dans la méthode 'init' de la vue personnalisée, pas dans' drawRect: '. – rmaddy

+0

Merci @rmaddy, j'ai ajouté une note à la réponse. – user3386109

8

J'avais besoin de cela. Quand j'ai mis cela, a travaillé.

self.opaque = NO; 
3

Cela a fonctionné pour moi sur Swift 3:

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

Vous devez définir la couleur d'arrière-plan clearColor dans initialisation.

Voici l'exemple

-(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); 
}