无法使CGGradientRef与alpha一起使用

时间:2014-03-07 18:48:32

标签: ios core-graphics

我正在尝试将一个alpha渐变应用于UIView但是根本无法使其工作。我当前的drawRect:方法看起来像这样 -

- (void)drawRect:(CGRect)rect
{
    CGContextRef currentContext = UIGraphicsGetCurrentContext();

    CGGradientRef alphaGradient;
    CGColorSpaceRef rgbColorSpace;
    size_t num_locations = 2;
    CGFloat locations[2] = { 0.0, 1.0 };
    CGFloat components[8] = { 1.0, 1.0, 1.0, 1.0,  // Start color
    1.0, 1.0, 1.0, 0.0 }; // End color

    rgbColorSpace = CGColorSpaceCreateDeviceRGB();
    alphaGradient = CGGradientCreateWithColorComponents(rgbColorSpace, components, locations, num_locations);

    CGRect currentBounds = self.bounds;
    CGPoint bottomCenter = CGPointMake(CGRectGetMidX(currentBounds), CGRectGetMaxY(currentBounds));
    CGPoint midCenter = CGPointMake(CGRectGetMidX(currentBounds), CGRectGetMidY(currentBounds));
    CGContextDrawLinearGradient(currentContext, alphaGradient, midCenter, bottomCenter, 0);

    CGGradientRelease(alphaGradient);
    CGColorSpaceRelease(rgbColorSpace);
}

我相信我在这里缺少一些东西。我尝试将RGB值更改为0.0而不是1.0,将颜色空间更改为灰度等。

任何帮助我指向正确方向的人都会非常感激。感谢

2 个答案:

答案 0 :(得分:2)

我通过确保将视图的背景颜色设置为清除,然后将视图的图层应用为图像视图上的蒙版来解决此问题。

答案 1 :(得分:0)

我使用CAGradient:

UIView * viewToGradient = // view to add gradient
UIColor * color1 = [UIColor lightGrayColor]; // gradient color 1
UIColor * color2 = [UIColor clearColor]; // gradient color 2

CAGradientLayer * gradientLayer = [CAGradientLayer layer];
gradientLayer.frame = viewToGradient.bounds;
gradientLayer.colors = [NSArray arrayWithObjects:(id)color1.CGColor, (id)color2.CGColor, nil];
gradientLayer.opacity = .6;
[viewToGradient.layer addSublayer:gradientLayer];