我有这个可用的代码:
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]];
-CGColor
返回一个CGColorRef
,它没有声明为 Objective-C 对象,但可以通过桥接作为一个 Objective-C 对象使用(因为它是一个 CF 对象)。由于它没有声明为 Objective-C 对象,所以需要进行强制转换;由于它可以作为一个 Objective-C 对象使用,所以这个转换是安全的。 - Peter Hosey