2011-01-31 10 views
12

Chcę dodać gradient jako tło do etykiety. Użyłem następującego kodu, aby to osiągnąć. ale problem polega na tym, że chociaż kolor gradientu pojawia się na etykiecie, ale tekst nie jest widoczny. pomóżDodawanie CGGradient jako podwarstwa do UILabel ukrywa tekst etykiety

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]; 

Odpowiedz

13

Wstawianie podwarstwy Do UILabel ukrywa tekst, więc najlepszym sposobem, aby dostać to, co chcesz, aby dodać etykietę i warstwę gradientu do 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 wiem, że jej coraz dodany powyżej tekstu: (... możesz mi powiedzieć jak dodać tę warstwę na back..I już próbowałem linia, którą zasugerowałeś, to działa, zmieniłem indeksy również ale bez skutku :) prosze o pomoc, z góry dziękuję :) – Fatema

+0

Nie jestem pewien, może się zdarzyć, że nie możesz tego zrobić na UILabelach. Możesz spróbować utworzyć UIView z gradientem, a następnie dodać etykietę jako podgląd. –

+2

Dzięki James Wypróbowałem drugą opcję :) dodano gradient na UIView i dodałem etykietę jako subview :-) – Fatema

-4

Myślę, że można utworzyć kolor gradientu, dostosowując wartość alfa w powyższym kodzie.

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]; 

Udało mi się uzyskać efekt gradientu.

2

Sugerowana odpowiedź z UILabel wewnątrz prac UIView. Najwyraźniej UILabels nie może mieć tekstu w nich po podaniu tła w tle koloru gradientu ... nie wiem dlaczego ...

Ale jest pełny kod rozwiązania .... mam nadzieję, że to pomoże komuś :)

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]; 

Szczęśliwe kodowanie !!!!

+0

Czy możemy zrobić to samo bez korzystania z dodatkowych widoków –

1

Jeszcze jedno pytanie, aby poprawić odpowiedź. Jeśli używasz autolayouts do umieszczenia niestandardowego widoku, możesz uzyskać ten problem - http://prntscr.com/5tj7bx

Twój widok ma zatem inny rozmiar niż subView - UILabel i subLayer - warstwa gradientu.

rozwiązać ten problem poprzez dodanie jednej metody

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

override func layoutSubviews() { 
    gradientLayer.frame = self.bounds 
    label.frame = self.bounds 
} 
...... 
Powiązane problemy