为什么我的CGGradient不能使用预设的UIColor?

kub*_*ubi 8 cocoa-touch core-graphics uikit uicolor ios

我有这个工作代码:

    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);
Run Code Online (Sandbox Code Playgroud)

颜色声明是我感兴趣的,行2和4.当我宣布他们如图所示,他们的工作就好了一部分,但如果我用等价替换这两行(我想,至少)[UIColor blackColor][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]];
Run Code Online (Sandbox Code Playgroud)

Pet*_*sey 1

该代码对我来说看起来不错。blackColor并且clearColor可能都在白色颜色空间中,但文档说CGGradientCreateWithColors会将颜色转换为您传入的颜色空间,因此这应该不重要。

\n\n

我唯一能想到的就是尝试传递NULL颜色空间,让渐变将颜色转换为通用 RGB 而不是设备 RGB。这可能有效,但不应该产生影响\xe2\x80\x94据我所知,它应该以任何方式工作。

\n\n

我建议提交一个错误

\n