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对象,所以需要一个投射;因为它可以用作投射,所以投射是安全的。库比:有什么原因让你自己画一个阴影,而不是在画任何应该有这个阴影的东西之前设置一个黑色阴影?参见