UIColor e Gráficos Contexto
-
14-11-2019 - |
Pergunta
Eu tenho um costume a uiview que desenha um caminho assim
- (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];
}
Minha personalizado a uiview tem também um método para alterar o preenchimento de cor
- (void) changeColor:(UIColor *) newColor {
self.color = [newColor CGColor];
[self setNeedsDisplay];
}
Se eu chamar o changeColor:método com qualquer uma das cores predefinidas, tais como
[UIColor redColor]
tudo funciona bem.Em vez disso, se eu tentar dar-lhe uma cor personalizada, tais como
UIColor* color = [UIColor colorWithRed:1.0f green:0.0f blue:0.0f alpha:1.0f];
a cor da minha personalizado a uiview cintilação entre o branco, vermelho e azul aleatoriamente.
Alguma idéia de por que isso?
Obrigado antecipadamente!
Solução
Tente:
CGContextSetFillColorWithColor(ctx, self.color.CGColor);
em vez de:
CGContextSetFillColor(ctx, CGColorGetComponents(self.color));
Outras dicas
Quando você estiver usando este método de chamada :
[UIColor redColor];
Para fins de otimização, UIColor retornar um objeto com apenas 2 componentes, porque ele não precisa de outro.(Isso é possível com o mecanismo da Classe clustering).
É talvez por isso que o código de mostrar algumas diferenças entre estas duas cores.