Domanda

Ho un'uccatura personalizzata che disegna un percorso come

- (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];

}
.

Il mio UIView personalizzato ha anche un metodo per cambiare il colore di riempimento

- (void) changeColor:(UIColor *) newColor {

    self.color = [newColor CGColor];
    [self setNeedsDisplay];

}
.

Se chiamo il changecolor: metodo con uno qualsiasi dei colori predefiniti come

 [UIColor redColor]  
.

Tutto funziona bene.Invece se cerco di dargli un colore personalizzato come

 UIColor* color = [UIColor colorWithRed:1.0f green:0.0f blue:0.0f alpha:1.0f];
.

Il colore del mio sfarfallio UIView personalizzato tra bianco, rosso e blu a caso.

Qualche idea del perché è quella?

Grazie in anticipo!

È stato utile?

Soluzione

Prova:

CGContextSetFillColorWithColor(ctx, self.color.CGColor);
.

invece di:

CGContextSetFillColor(ctx, CGColorGetComponents(self.color));
.

Altri suggerimenti

Quando si utilizza questa chiamata del metodo:

[UIColor redColor];
.

Per scopi di ottimizzazione, Uicolore restituisce un oggetto con solo 2 componenti perché non ha bisogno dell'altro.(Questo è reso possibile con il meccanismo del clustering della classe).

È forse perché il tuo codice mostra alcune differenze tra questo due colori.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top