CALayer:线性梯度问题

时间:2012-12-28 19:57:57

标签: objective-c ios calayer linear-gradients

我正在我的一个CALayers上绘制一个线性渐变颜色,但随机输出相同的颜色,在屏幕上绘制的颜色为粉红色。

代码如下:

bottomComponents = bottomColor.colorComponents;
topComponents = topColor.colorComponents;
middleComponents = middleColor.colorComponents;

CGContextRef currentContext = UIGraphicsGetCurrentContext();

CGGradientRef glossGradient;
CGColorSpaceRef rgbColorspace;

size_t numberOfLocations = 3;
CGFloat locations[3] = {0.0f, MIDDLE_POINT, 1.0f};
CGFloat components[12] =
{
    topComponents.red, topComponents.green, topComponents.blue, topComponents.alpha,
    middleComponents.red, middleComponents.green, middleComponents.blue, middleComponents.alpha,
    bottomComponents.red, bottomComponents.green, bottomComponents.blue, bottomComponents.alpha
};

rgbColorspace = CGColorSpaceCreateDeviceRGB();
glossGradient = CGGradientCreateWithColorComponents(rgbColorspace, components, locations, numberOfLocations);

CGRect currentBounds = self.bounds;
CGPoint topCenter = CGPointMake(CGRectGetMidX(currentBounds), 0.0f);
CGPoint bottomCenter = CGPointMake(CGRectGetMidX(currentBounds), CGRectGetHeight(currentBounds));
CGContextDrawLinearGradient(currentContext, glossGradient, topCenter, bottomCenter, 0);

CGGradientRelease(glossGradient);
CGColorSpaceRelease(rgbColorspace);

colorComponents只返回带有颜色分量的结构。

当我在日志中输出颜色时,它是正确的颜色,但当它出现在屏幕上时,无论起始颜色如何,它都是粉红色。

我做错了什么可能导致随机粉红色出现?

粉红色完全零星地出现。我将从完全相同的值加载很少,但肯定会显示粉红色。从不同的值加载会产生相同的结果。它的发生率约为1-2%。

1 个答案:

答案 0 :(得分:0)

有时您使用UIColor预定义颜色吗? (例如greenColor) 我发现那些没有生成适当的组件。

利维乌