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!

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top