2012-05-30 24 views
20

Tengo una vista, que tiene un CALayer. Cuando creo un CAGradientLayer y lo aplico como la máscara del CALayer de esa vista, no ocurre nada. ¿Por qué?Cómo aplicar CAGradientLayer como máscara de otro CALayer?

En -initWithFrame: de la opinión de que 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?

+0

Para otros que luchan con la máscara de degradado, no va a funcionar si se aplica a un 'UIStackView '. –

Respuesta

33

La propiedad de máscara en CALayer utiliza el componente alpha de la capa de máscara para determinar qué debe ser visible y qué no. Como los dos colores (blanco y negro) son completamente opacos (sin transparencia), la máscara no tiene efecto. Para solucionar este problema, debe 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

Cuestiones relacionadas