Uicolor y contexto gráficos.
-
14-11-2019 - |
Pregunta
Tengo una vista UIVIE personalizada que dibuja un camino así
- (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];
}
My Custom UIView también tiene un método para cambiar el color de llenado
- (void) changeColor:(UIColor *) newColor {
self.color = [newColor CGColor];
[self setNeedsDisplay];
}
Si llamo al método ChangeColor: con alguno de los colores predefinidos, como
[UIColor redColor]
todo funciona bien.En su lugar, si trato de darle un color personalizado, como
UIColor* color = [UIColor colorWithRed:1.0f green:0.0f blue:0.0f alpha:1.0f];
El color de mi parpadeo de UIView personalizado entre blanco, rojo y azul al azar.
¿Alguna idea de por qué es eso?
¡Gracias de antemano!
Solución
intento:
CGContextSetFillColorWithColor(ctx, self.color.CGColor);
en lugar de:
CGContextSetFillColor(ctx, CGColorGetComponents(self.color));
Otros consejos
Cuando está utilizando este método, llamada:
[UIColor redColor];
Para fines de optimización, Uicolor devuelve un objeto con solo 2 componentes porque no necesita el otro.(Esto es posible con el mecanismo de agrupamiento de clase).
Es posible que su código muestre algunas diferencias entre estos dos colores.