Contexte uicolor et graphique
-
14-11-2019 - |
Question
J'ai un uiView personnalisé qui dessine un chemin comme ainsi
- (void)drawRect:(CGRect)rect{
[[UIColor blackColor] setStroke];
CGContextRef ctx = UIGraphicsGetCurrentContext();
CGContextSetFillColor(ctx, CGColorGetComponents(self.color));
CGContextFillPath(ctx);
UIBezierPath *thePath = [UIBezierPath bezierPath];
thePath.lineWidth = _lineWidth;
_center = CGPointMake(rect.size.width, rect.size.height);
[thePath moveToPoint:_center];
[thePath addArcWithCenter:_center radius:rect.size.width startAngle:M_PI endAngle:M_PI+degreesToRadians(_angle)clockwise:YES];
[thePath closePath];
[thePath fill];
}
Mon uiView personnalisé a également une méthode pour modifier la couleur de remplissage
- (void) changeColor:(UIColor *) newColor {
self.color = [newColor CGColor];
[self setNeedsDisplay];
}
Si j'appelle la méthode ChangeColor: avec l'une des couleurs prédéfinies telles que
[UIColor redColor]
Tout fonctionne bien. Au lieu de cela, si j'essaie de lui donner une couleur personnalisée comme
UIColor* color = [UIColor colorWithRed:1.0f green:0.0f blue:0.0f alpha:1.0f];
La couleur de mon UiView coutume scintille entre le blanc, le rouge et le bleu au hasard.
Des idées de pourquoi est-ce?
Merci d'avance!
La solution
Essayer:
CGContextSetFillColorWithColor(ctx, self.color.CGColor);
à la place de:
CGContextSetFillColor(ctx, CGColorGetComponents(self.color));
Autres conseils
Lorsque vous utilisez cette méthode, appelez:
[UIColor redColor];
À des fins d'optimisation, UICOLOR renvoie un objet avec seulement 2 composants car il n'a pas besoin de l'autre. (Ceci est rendu possible avec le mécanisme du clustering de classe).
C'est peut-être pourquoi votre code montre quelques différences entre ces deux couleurs.