Contesto di uicolore e grafica
-
14-11-2019 - |
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!
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.