¿Cómo aplicar CAGradientLayer como máscara de otro CALayer?

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?

Respuestas a la pregunta(1)

Su respuesta a la pregunta