在iOS中,在白色上绘制透明到白色渐变

时间:2015-02-03 16:01:12

标签: ios transparency drawrect linear-gradients cagradientlayer

我在主屏幕上有一个带有文字的iOS应用程序滚动。我希望文本在屏幕底部淡出。所以我制作了一个自定义视图,并在drawRect

中执行此类操作
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGContextRef context = UIGraphicsGetCurrentContext();

CGFloat gradLocs[] = {0, 1};
CGColor *color1 = [UIColor clearColor].CGColor;
CGColor *color2 = [UIColor whiteColor].CGColor;
CFArrayRef arr = (CFArrayRef)@[(id)color1, (id)color2];
CGGradientRef grad = CGGradientCreateWithColors(colorSpace, arr, gradLocs);

CGContextSaveGState(context);
CGContextDrawLinearGradient(context, grad, CGPointMake(0, 0), CGPointMake(0, rect.size.height), 0);
CGContextRestoreGState(context);

基本上,在视图上绘制从清晰到白色的线性渐变。我也试过CAGradientLayer

CAGradientLayer *layer = [CAGradientLayer layer];
layer.colors = @[(id)[UIColor clearColor].CGColor, (id)[UIColor whiteColor].CGColor];
layer.locations = @[@(0), @(1)];
layer.frame = CGRectMake(0, 0, self.frame.size.width, self.frame.size.height);
[self.layer insertSublayer:layer atIndex:0];

无论哪种方式,如果它被绘制在白色的顶部,我会变灰。 PaintCode显示了同样的事情:

PaintCode screenshot

这是为什么?似乎渐变不应该只是在白色的顶部可见。

1 个答案:

答案 0 :(得分:14)

+[UIColor clearColor]实际上是透明的黑色。由于你想要透明的白色,你应该使用:

color1 = [[UIColor whiteColor] colorWithAlphaComponent:0.0].CGColor;

仔细阅读文档+[UIColor clearColor]它会返回一个带有灰度和alpha值0.0的颜色。因此,从白色到透明的渐变中间是[UIColor initWithWhite:0.5 alpha:0.5],即透明灰色。