Dibuja gradiente transparente a blanco sobre blanco en iOS

Tengo una aplicación de iOS con text en la pantalla principal que se desplaza. Quiero que el text se desvanezca en la parte inferior de la pantalla. Así que hago una vista personalizada y hago algo como esto en 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); 

Básicamente, dibuja un gradiente lineal de claro a blanco sobre la vista. También he intentado hacerlo con un 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]; 

De cualquier manera, si esto se dibuja sobre el blanco, me pongo gris. PaintCode muestra lo mismo:

Captura de pantalla de PaintCode

¿Por qué es esto? Parece que el gradiente no debe ser visible en absoluto solo blanco.

+[UIColor clearColor] es de hecho negro transparente. Dado que quiere blanco transparente, debe usar:

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

Si lee la documentation atentamente a +[UIColor clearColor] , dice que devolverá un color con escala de grises y valores alfa de 0.0 . Entonces, el centro en su gradiente de blanco a transparente es [UIColor initWithWhite:0.5 alpha:0.5] , es decir, gris transparente.