【问题标题】:iOS, CGGradientCreateWithColorComponets set RGBA coloriOS,CGGradientCreateWithColorComponets 设置 RGBA 颜色
【发布时间】: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种颜色的激进渐变?

【问题讨论】:

    标签: ios calayer rgba


    【解决方案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} ;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-06
      相关资源
      最近更新 更多