代码之家  ›  专栏  ›  技术社区  ›  kubi

为什么我的CGGradient不能使用预设的UIColor?

  •  8
  • kubi  · 技术社区  · 14 年前

    我有一个工作代码:

        NSMutableArray *shadowColors = [NSMutableArray arrayWithCapacity:2];
        color = [UIColor colorWithRed:0 green:0 blue:0 alpha:1]; // Declaration using components
        [shadowColors addObject:(id)[color CGColor]];
        color = [UIColor colorWithRed:1 green:1 blue:1 alpha:0.0]; // Declaration using components
        [shadowColors addObject:(id)[color CGColor]];
    
        CGColorSpaceRef space = CGColorSpaceCreateDeviceRGB();
        CGGradientRef gradient = CGGradientCreateWithColors(space, (CFArrayRef)shadowColors, NULL);
        CGColorSpaceRelease(space);
    
        CGFloat sw = 10.0; // shadow width
    
        CGPoint top1 = CGPointMake(x, y+width/2.0);
        CGPoint top2 = CGPointMake(x + sw, y+width/2.0);
    
        CGPoint side1 = CGPointMake(x+width/2.0, y);
        CGPoint side2 = CGPointMake(x+width/2.0, y+sw);
    
        CGContextDrawLinearGradient(c, gradient, top1, top2, 0);
        CGContextDrawLinearGradient(c, gradient, side1, side2, 0);
        CGGradientRelease(gradient);
    

    颜色声明是我感兴趣的部分,第2行和第4行。当我如图所示声明它们时,它们工作得很好,但是如果我用等价的代码替换这两行代码(我想,至少) [UIColor blackColor] [UIColor clearColor] 然后我的梯度消失了。我用的颜色没什么区别,我可以用 greenColor redColor 但它们还是不起作用。


    代码 工作。这只是第一部分,其他都是一样的。

        NSMutableArray *shadowColors = [NSMutableArray arrayWithCapacity:2];
        color = [UIColor blackColor];
        [shadowColors addObject:(id)[color CGColor]];
        color = [UIColor clearColor];
        [shadowColors addObject:(id)[color CGColor]];
    
    1 回复  |  直到 14 年前
        1
  •  1
  •   Peter Hosey    14 年前

    代码在我看来没问题。 blackColor clearColor 可能都在白色空间,但文件上说 CGGradientCreateWithColors

    NULL 对于颜色空间,允许渐变将颜色转换为通用RGB而不是设备RGB。这也许行得通,但不会有什么不同。就我看来,不管怎样,都应该行得通的。

    我建议 filing a bug