【发布时间】:2015-06-21 06:28:36
【问题描述】:
-(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种颜色的激进渐变?
【问题讨论】: