2010-10-10 13 views
8

ho questo codice di lavoro:Perché il mio CGGradient non funziona con un UIColor preimpostato?

NSMutableArray *shadowColors = [NSMutableArray arrayWithCapacity:2]; 
    color = [UIColor colorWithRed:0 green:0 blue:0 alpha:1]; // Declaration using components 
    [shadowColors addObject:(id)[color CGColor]]; 
    color = [UIColor colorWithRed:1 green:1 blue:1 alpha:0.0]; // Declaration using components 
    [shadowColors addObject:(id)[color CGColor]]; 

    CGColorSpaceRef space = CGColorSpaceCreateDeviceRGB(); 
    CGGradientRef gradient = CGGradientCreateWithColors(space, (CFArrayRef)shadowColors, NULL); 
    CGColorSpaceRelease(space); 

    CGFloat sw = 10.0; // shadow width 

    CGPoint top1 = CGPointMake(x, y+width/2.0); 
    CGPoint top2 = CGPointMake(x + sw, y+width/2.0); 

    CGPoint side1 = CGPointMake(x+width/2.0, y); 
    CGPoint side2 = CGPointMake(x+width/2.0, y+sw); 

    CGContextDrawLinearGradient(c, gradient, top1, top2, 0); 
    CGContextDrawLinearGradient(c, gradient, side1, side2, 0); 
    CGGradientRelease(gradient); 

Le dichiarazioni di colore sono la parte che mi interessa, linee 2 e 4. Quando io li dichiarare come mostrato, funzionano bene, ma se sostituire quei due linee con l'equivalente (ho pensato, almeno) [UIColor blackColor] e [UIColor clearColor] poi i miei gradienti scompaiono. I colori che uso non fanno alcuna differenza, posso usare greenColor e redColor e continuano a non funzionare.

Mi manca qualcosa o si tratta di un bug nei framework Apple?


Il codice che non lavoro. E questa è solo la prima sezione, tutto il resto è lo stesso.

NSMutableArray *shadowColors = [NSMutableArray arrayWithCapacity:2]; 
    color = [UIColor blackColor]; 
    [shadowColors addObject:(id)[color CGColor]]; 
    color = [UIColor clearColor]; 
    [shadowColors addObject:(id)[color CGColor]]; 
+0

Puoi mostrare * esattamente * come appare il tuo codice che non funziona? PS: Perché lanci qualcosa all'id? Questo non ha senso. – Eiko

+0

L'esecuzione dell'identificazione non elimina l'avviso 'passare argomento da tipo di puntatore incompatibile'. – kubi

+0

oh, e ho aggiornato la mia domanda con il codice non funzionante. – kubi

risposta

1

Il codice guarda bene a me. blackColor e clearColor sono probabilmente entrambi in uno spazio colore bianco, ma la documentazione dice che CGGradientCreateWithColors convertirà i colori nello spazio colore che si passa, quindi non dovrebbe importare.

L'unica cosa che posso pensare sarebbe di provare a passare NULL per lo spazio colore, lasciando che il gradiente converta i colori in RGB generico invece di Dispositivo RGB. Questo può funzionare, ma non dovrebbe fare la differenza, per quanto posso vedere, dovrebbe funzionare in entrambi i modi.

Suggerisco filing a bug.

Problemi correlati