2011-01-31 12 views
12

Quiero agregar el degradado como fondo a la etiqueta. Usé el siguiente código para lograr eso. pero el problema es que aunque el color del degradado aparece en la etiqueta, pero el texto no está visible. por favor ayudaAgregar un CGGradient como subcapa a UILabel oculta el texto de la etiqueta

lblPatientDetail.text=PatientsDetails; 

lblPatientDetail.textColor=[UIColor blackColor]; 

CAGradientLayer *gradient = [CAGradientLayer layer]; 
gradient.frame = lblPatientDetail.bounds; 
gradient.colors = [NSArray arrayWithObjects:(id)[[UIColor whiteColor] CGColor],(id)[[UIColor colorWithRed:255/255.0 green:239/255.0 blue:215/255.0 alpha:1.0] CGColor],nil]; 

[lblPatientDetail.layer addSublayer:gradient]; 

lblPatientDetail.backgroundColor=[UIColor clearColor]; 

Respuesta

13

Inserción de una subcapa a un UILabel oculta el texto, por lo que la mejor manera de conseguir lo que desea es añadir la etiqueta y la capa de gradiente a un UIView.

UIView *gradientLabelView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 30)]; 

CAGradientLayer *gradient = [CAGradientLayer layer]; 
gradient.frame = gradientLabelView.bounds; 
gradient.colors = [NSArray arrayWithObjects:(id)[[UIColor whiteColor] CGColor],(id)[[UIColor colorWithRed:255/255.0 green:239/255.0 blue:215/255.0 alpha:1.0] CGColor],nil]; 

[gradientLabelView.layer addSublayer:gradient]; 

lblPatientDetail.frame = gradientLabelView.bounds; 
lblPatientDetail.backgroundColor = [UIColor clearColor]; 
[gradientLabelView addSubview:lblPatientDetail]; 

[self addSubview:gradientLabelView]; 
+1

ya sé que van añadiendo su texto anterior: (... puede decirme cómo agregar esta capa en back..I ya han probado este línea que sugirió. No funciona. Cambié los índices también pero no sirvió :) por favor ayuda, gracias de antemano :) – Fatema

+0

No estoy seguro, podría ser que no puedas hacer esto en UILabels. Podría intentar crear un UIView con un degradado y luego agregar la etiqueta como una subvista. –

+2

Gracias James Probé tu segunda opción :) Agregué el degradado en UIView y luego agregué la etiqueta como subvista :-) – Fatema

-4

Creo que puede crear un color degradado ajustando el valor alfa en el código anterior.

gradient.colors = [NSArray arrayWithObjects:(id)[[UIColor whiteColor] CGColor],(id)[[UIColor colorWithRed:255/255.0 green:239/255.0 blue:215/255.0 alpha:0.1] CGColor],nil]; 

Pude obtener un efecto degradado al hacerlo.

2

La respuesta sugerida con el UILabel dentro de una UIView funciona. Aparentemente UILabels no puede tener texto dentro de ellos después de darle al fondo un fondo degradado de color ... no sé por qué ...

Pero aquí está el código completo de la solución .... espero que esto ayude a alguien :)

UIView *EnvironmentalsLabelView = [[UIView alloc] initWithFrame:CGRectMake(0, 300, 320, 20)]; 
CAGradientLayer *gradient = [CAGradientLayer layer]; 
gradient.frame = EnvironmentalsLabelView.bounds; 
gradient.colors = [NSArray arrayWithObjects:(id)[[UIColor darkGrayColor]CGColor], (id)[[UIColor blackColor]CGColor], nil]; 
[EnvironmentalsLabelView.layer insertSublayer:gradient atIndex:0]; 
[scroller addSubview:EnvironmentalsLabelView]; 

UILabel *EnviornmentalsLabelText = [[UILabel alloc] initWithFrame:EnvironmentalsLabelView.bounds]; 
[EnviornmentalsLabelText setFont:[UIFont fontWithName:@"Arial-BoldMT" size:12.0f]]; 
EnviornmentalsLabelText.textAlignment = NSTextAlignmentCenter; 
EnviornmentalsLabelText.backgroundColor = [UIColor clearColor]; 
EnviornmentalsLabelText.text = @"Environmental Benefits"; 
[EnvironmentalsLabelView addSubview:EnviornmentalsLabelText]; 

Happy coding !!!!

+0

¿Podemos hacer lo mismo sin usar vistas adicionales? –

1

Un pensamiento adicional para corregir la respuesta. Si se utiliza el ajuste automático para colocar su vista personalizada, puede obtener este problema: http://prntscr.com/5tj7bx

Entonces su vista tiene un tamaño diferente que subView - UILabel y subLayer - capa de degradado.

que resuelven este problema añadir un método

class wResultView: UIView { 
var label = UILabel() 
var gradientLayer = CAGradientLayer() 

override func layoutSubviews() { 
    gradientLayer.frame = self.bounds 
    label.frame = self.bounds 
} 
...... 
Cuestiones relacionadas