CAGradientLayer detrás de self.layer que aparece arriba

Estoy tratando de crear una clase UIButton personalizada, excepto que, al dibujar el fondo del botón y agregarlo como una subcapa usando el método insertSubLayer Behind:, todavía aparece frente a la etiqueta de texto UIButton.

Mi código se publica a continuación. Cualquier ayuda sería muy apreciada.

CALayer *layer = self.layer;

layer.cornerRadius = 3.0f;
layer.masksToBounds = YES;
layer.borderWidth = 1.0f;
layer.borderColor = [UIColor colorWithWhite:0.5f alpha:0.5f].CGColor;
self.titleLabel.textColor = [UIColor greenColor];
//layer.backgroundColor = [UIColor greenColor].CGColor;

bgColor = [CAGradientLayer layer];
bgColor.frame = self.layer.bounds;
self.backgroundColor = [UIColor colorWithWhite:1 alpha:1];
bgColor.colors = [NSArray arrayWithObjects:
                     (id)[UIColor colorWithWhite:0.97f alpha:1].CGColor,
                     (id)[UIColor colorWithWhite:0.87f alpha:1].CGColor,
                     nil];
bgColor.locations = [NSArray arrayWithObjects:
                        [NSNumber numberWithFloat:0.0f],
                        [NSNumber numberWithFloat:1],
                        nil];
[self.layer addSublayer:bgColor];
[self.layer insertSublayer:bgColor below:layer];

preguntado el 31 de julio de 12 a las 11:07

¿Dónde está este código en su clase de botón? -

Se ejecuta en InitWithFrame -

1 Respuestas

self.layer y layer en su código apunte al mismo objeto. Le está pidiendo a la capa que inserte una subcapa detrás de sí misma; esto no es posible. Las subcapas están contenidas dentro de la capa principal. Tratar

[self.layer insertSublayer:bgColor atIndex:0];

En lugar de

[self.layer addSublayer:bgColor]; 
[self.layer insertSublayer:bgColor below:layer];

Esto agregará el degradado en el punto más bajo posible en la jerarquía de capas de su botón.

Respondido 31 Jul 12, 11:07

Eres un salvavidas. Funcionó a la primera. Muchísimas gracias. Me ahorró mucho dolor de cabeza. - nickw444

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.