-(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代码 . How do achieve radical gradient of 2 colors specifically?
1 回答
问题是你使用的是0到255之间的值 . 但是当处理浮点颜色时,它期望值介于0.0和1.0之间(就像你使用alpha一样) .
如果将值除以255,则应该看到预期的渐变: