Почему мой CGGradient не работает с предустановленным UIColor? - PullRequest
8 голосов
/ 10 октября 2010

У меня есть этот рабочий код:

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

Объявление цвета - это интересующая меня часть, строки 2 и 4. Когда я объявляю их, как показано, они работают нормально, но если я заменю эти две строки на эквивалентные (я думал, по крайней мере) 1004 * и [UIColor clearColor] тогда мои градиенты исчезают. Цвета, которые я использую, не имеют никакого значения, я могу использовать greenColor и redColor, и они все еще не работают.

Я что-то упустил или это ошибка в инфраструктуре Apple?


Код, который не работает. И это только первый раздел, все остальное тоже самое.

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

1 Ответ

1 голос
/ 11 октября 2010

Код выглядит хорошо для меня.blackColor и clearColor, вероятно, оба находятся в белом цветовом пространстве, но в документации сказано, что CGGradientCreateWithColors преобразует цвета в цветовое пространство, которое вы передаете, так что это не должно иметь значения.

Единственное единственноея мог бы попытаться передать NULL для цветового пространства, позволяя градиенту преобразовывать цвета в общий RGB вместо устройства RGB.Это может сработать, но не должно иметь никакого значения - насколько я вижу, это должно работать в любом случае.

Я предлагаю заполнение сообщения об ошибке .

...