ios - ¿Cómo aplicar CAGradientLayer como máscara de otro CALayer?
core-animation (1)
Tengo una vista, que tiene un CALayer. Cuando creo un CAGradientLayer y lo aplico como la máscara del CALayer de esa vista, no sucede nada. ¿Por qué?
En -initWithFrame: de la vista hago esto:
CAGradientLayer *gradient = [CAGradientLayer layer];
gradient.frame = self.bounds;
gradient.colors = [NSArray arrayWithObjects:(id)[[UIColor blackColor] CGColor], (id)[[UIColor whiteColor] CGColor], nil];
//[self.layer insertSublayer:gradient atIndex:0];
self.layer.mask = gradient;
Si sustituyo
self.layer.mask = gradient;
con
[self.layer insertSublayer:gradient atIndex:0];
Entonces veo el gradiente. Es de negro a blanco.
¿Cuál es el truco?
La propiedad de máscara en CALayer usa el componente alfa de la capa de máscara para determinar qué debe ser visible y qué no. Dado que ambos colores (blanco y negro) son completamente opacos (sin transparencia), la máscara no tiene efecto. Para arreglar esto debes cambiar uno de los colores a un color claro:
gradient.colors = [NSArray arrayWithObjects:(id)[[UIColor blackColor] CGColor],
(id)[[UIColor clearColor] CGColor], nil];
Ese es el "truco": D