2015-04-15 100 views
0
-(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中。iOS,CGGradientCreateWithColorComponets设置RGBA颜色

从文档,苹果状态:

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

当我提供{165.0f, 42.0f, 42.0f, 1.0f, 0.0f, 100.0f, 255.0f, 1.0f} ,褐青色满足,我看到的是蓝色的外观色,白色中心。

我设法玩耍并获得一些不同的颜色,但他们从来没有完全正确匹配提供的RGBA代码。 具体如何实现2种颜色的渐变渐变?

回答

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} ;