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!

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top