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

Draw transparent-to-white gradient over white in iOS

我有一个 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 显示相同的内容:

这是为什么?似乎渐变不应该在白色之上完全可见。

+[UIColor clearColor]其实就是透明黑。因为你想要透明的白色,你应该使用:

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

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