Добавление CGGradient в качестве подслоя к UILabel скрывает текст метки - PullRequest
19 голосов
/ 31 января 2011

Я хочу добавить градиент в качестве фона для надписи. Я использовал следующий код, чтобы добиться этого. но проблема в том, что хотя цвет градиента появляется на этикетке, но текст не виден. пожалуйста помогите

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

Ответы [ 4 ]

20 голосов
/ 31 января 2011

Вставка подслоя в UILabel скрывает текст, поэтому лучший способ получить то, что вам нужно, это добавить слой метки и градиента в 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];
2 голосов
/ 18 июня 2013

Предлагаемый ответ с UILabel внутри UIView работает.По-видимому, у UILabels не может быть текста внутри них после придания фону градиентного цвета фона ... не знаю почему ....

Но вот полный код решения .... надеюсь, это кому-нибудь поможет)

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

Удачного кодирования !!!!

1 голос
/ 17 января 2015

Еще одна дополнительная мысль, чтобы исправить ответ.Если вы используете autolayouts для размещения своего пользовательского представления, вы можете получить эту проблему - http://prntscr.com/5tj7bx

Таким образом, ваше представление имеет другой размер, чем subView - UILabel и subLayer - слой градиента.

Я решаюэту проблему, добавив один метод

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

override func layoutSubviews() {
    gradientLayer.frame = self.bounds
    label.frame = self.bounds
}
......
0 голосов
/ 11 января 2012

Я думаю, вы можете создать цвет градиента, отрегулировав значение альфа в приведенном выше коде.

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

Благодаря этому я смог получить эффект градиента.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...