iOS,CGGradientCreateWithColorComponets设置RGBA颜色

时间:2015-04-15 10:27:10

标签: ios calayer rgba

-(void)drawInContext:(CGContextRef)ctx{
    size_t gradLocationsNum = 2;

    CGFloat gradLocations[2] = {0.0f, 1.0f};

    CGFloat gradColors[8] = {255f,255f,255f,1f,255f,255f,255f,1f};
    //                       {R,   G,   B,  A,  R,   G,   B,  A}


    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
    CGGradientRef gradient = CGGradientCreateWithColorComponents(colorSpace, gradColors, gradLocations, gradLocationsNum);
    CGColorSpaceRelease(colorSpace);

    CGPoint gradCenter= CGPointMake(self.bounds.size.width/2, self.bounds.size.height/2);
    float gradRadius = MIN(self.bounds.size.width , self.bounds.size.height) ;

    CGContextDrawRadialGradient (ctx, gradient, gradCenter, 0, gradCenter, gradRadius, kCGGradientDrawsAfterEndLocation);


    CGGradientRelease(gradient);
}

我希望有两种颜色的激进渐变,任何两种,我不介意。 我已经覆盖了CALayer,并将其作为CAGradientLayer返回到视图控制器的SubLayer中。

从文档中,苹果州:

  

如果颜色空间是RGBA颜色空间,并且您想要使用两个颜色空间   渐变中的颜色(一个用于起始位置,另一个用于   结束位置),那么你需要在组件中提供8个值 - 红色,   第一种颜色的绿色,蓝色和alpha值,然后是红色,   第二种颜色的绿色,蓝色和Alpha值。

当我提供{165.0f, 42.0f, 42.0f, 1.0f, 0.0f, 100.0f, 255.0f, 1.0f}时 褐色遇见蓝色,我看到的是蓝色的外部颜色,白色中心。

我设法玩了并获得了一些不同的颜色,但它们从未完全正确匹配所提供的RGBA代码。 如何具体实现2种颜色的根本梯度?

1 个答案:

答案 0 :(得分:1)

问题是你使用的是0到255之间的值。但是当处理浮点颜色时,它期望值介于0.0和1.0之间(就像你使用alpha一样)。

如果将值除以255,您应该会看到预期的渐变:

CGFloat gradColors[8] = {165.0f / 255.0f, 42.0f / 255.0f, 42.0f / 255.0f, 1.0f, 0.0f, 100.0f / 255.0f, 255.0f / 255.0f, 1.0f} ;