2010-10-10 10 views
8

Mam ten kod roboczy:Dlaczego mój CGGradient nie działa z ustawionym UIColor?

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); 

Deklaracje kolorów są częścią mnie interesuje, linie 2 i 4. Kiedy zadeklarować je jak pokazano, pracują dobrze, ale jeśli mogę zastąpić te dwa linie z odpowiednikiem (przynajmniej pomyślałem) [UIColor blackColor] i [UIColor clearColor], wtedy moje gradienty znikają. Kolory, których używam, nie mają znaczenia, mogę używać greenColor i redColor i nadal nie działają.

Czy brakuje mi czegoś lub czy jest to błąd w frameworkach Apple'a?


Kod, który nie pracy. A to tylko pierwsza sekcja, wszystko inne jest takie samo.

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

Czy możesz pokazać * dokładnie * jak wygląda twój kod, który nie działa? PS: Dlaczego rzucasz cokolwiek na id? To nie ma sensu. – Eiko

+0

Przesyłanie do identyfikatora powoduje usunięcie ostrzeżenia "przekazywanie argumentów z niezgodnego wskaźnika". – kubi

+0

oh, a ja zaktualizowałem moje pytanie za pomocą niedziałającego kodu. – kubi

Odpowiedz

1

Kod wygląda dobrze dla mnie. blackColor i clearColor są prawdopodobnie w białej przestrzeni barwnej, ale w dokumentacji mówi się, że CGGradientCreateWithColors zamieni kolory na przestrzeń kolorów, którą przekazujesz, więc nie powinno to mieć znaczenia.

Jedyne, co mogę wymyślić, to spróbować przekazać NULL dla przestrzeni kolorów, pozwalając gradientowi przekonwertować kolory do Generic RGB zamiast Device RGB. To może zadziałać, ale nie powinno sprawić różnicy - o ile widzę, powinno działać w dowolny sposób.

Proponuję filing a bug.