iOS、CGGradientCreateWithColorComponets 设置RGBA颜色
iOS, CGGradientCreateWithColorComponets set RGBA color
-(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 中。
根据文档,苹果状态:
if the color space is an RGBA color space and you want to use two
colors in the gradient (one for a starting location and another for an
ending location), then you need to provide 8 values in components—red,
green, blue, and alpha values for the first color, followed by red,
green, blue, and alpha values for the second color.
当我提供{165.0f, 42.0f, 42.0f, 1.0f, 0.0f, 100.0f, 255.0f, 1.0f}
, 褐色遇上蓝色,我只看到蓝色的外层颜色,中间是白色。
我试过并获得了一些不同的颜色,但它们从未完全正确匹配提供的 RGBA 代码。 2种颜色的激进渐变具体如何实现?
问题是您使用的值介于 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} ;
-(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 中。
根据文档,苹果状态:
if the color space is an RGBA color space and you want to use two colors in the gradient (one for a starting location and another for an ending location), then you need to provide 8 values in components—red, green, blue, and alpha values for the first color, followed by red, green, blue, and alpha values for the second color.
当我提供{165.0f, 42.0f, 42.0f, 1.0f, 0.0f, 100.0f, 255.0f, 1.0f}
, 褐色遇上蓝色,我只看到蓝色的外层颜色,中间是白色。
我试过并获得了一些不同的颜色,但它们从未完全正确匹配提供的 RGBA 代码。 2种颜色的激进渐变具体如何实现?
问题是您使用的值介于 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} ;