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

Cocoa touch 为什么我的CGGradient不能使用预设的UIColor?,cocoa-touch,uikit,ios,core-graphics,uicolor,Cocoa Touch,Uikit,Ios,Core Graphics,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 col

我有这个工作代码:

    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行。当我如图所示声明它们时,它们工作得很好,但是如果我将这两行替换为等效的(至少我认为是这样)
[UIColor blackColor]
[UIColor clearColor]
,那么我的渐变就会消失。我使用的颜色没有任何区别,我可以使用
greenColor
redColor
但它们仍然不起作用

我是否遗漏了什么,或者这是苹果框架中的一个缺陷


不起作用的代码。这只是第一部分,其他的都一样

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

代码在我看来很好
blackColor
clearColor
可能都在白色空间中,但文档中说
CGGradientCreateWithColor
会将颜色转换为您传入的颜色空间,所以这不重要

我唯一能想到的就是尝试为颜色空间传递
NULL
,让渐变将颜色转换为通用RGB而不是设备RGB。这可能行得通,但就我所见不应该有什么不同,不管怎样都应该行


我建议。

您能准确地显示出您的代码不起作用的样子吗?附言:你为什么对身份证投下任何东西?这是没有意义的。强制转换到id将消除“从不兼容指针类型传递参数”警告。哦,我用非工作代码更新了我的问题。Eiko:
-CGColor
返回一个
CGColorRef
,该对象未声明为Objective-C对象,但可以通过免费桥接作为一个对象使用(因为它是一个CF对象)。因为它没有声明为Objective-C对象,所以需要一个投射;因为它可以用作投射,所以投射是安全的。库比:有什么原因让你自己画一个阴影,而不是在画任何应该有这个阴影的东西之前设置一个黑色阴影?参见