我有这个工作代码:
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行。当我按照所示声明它们时,它们工作正常,但如果我用等效物替换这两行(我想,至少){ {1}}和[UIColor blackColor]
然后我的渐变消失了。我使用的颜色没有任何区别,我可以使用[UIColor clearColor]
和greenColor
,但它们仍无效。
我错过了什么,或者这是Apple框架中的错误?
不的代码。这只是第一部分,其他一切都是一样的。
redColor
答案 0 :(得分:1)
代码看起来很好。 blackColor
和clearColor
可能都是白色空间,但文档说CGGradientCreateWithColors
会将颜色转换为您传入的颜色空间,因此无关紧要。
我唯一能想到的就是尝试传递NULL
颜色空间,让渐变将颜色转换为Generic RGB而不是Device RGB。这可能有用,但不应该有所作为 - 据我所知,它应该以任何方式工作。
我建议filing a bug。