2011-01-31 2 views
12

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

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

ответ

13

Вставка подслоя к 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]; 
+1

я знаю, что его получение добавлено выше текста: (... Вы можете сказать мне, как добавить этот слой на back..I уже пробовали это что вы меняли индексы, но безрезультатно :) Пожалуйста, помогите, спасибо заранее – Fatema

+0

Я не уверен, возможно, вы не можете сделать это на UILabels. Вы можете попробовать создать UIView с градиентом, а затем добавить метку в качестве подвью. –

+2

Спасибо Джеймсу, я попробовал ваш второй вариант :) добавил градиент на UIView и добавил ярлык как subview :-) – Fatema

-4

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

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

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

2

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

Но heres полный код для решения .... надеюсь, что это кому-то помогает :)

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

Счастливое кодирование !!!!

+0

Можем ли мы сделать то же самое без использования дополнительных просмотров –

1

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

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

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

override func layoutSubviews() { 
    gradientLayer.frame = self.bounds 
    label.frame = self.bounds 
} 
...... 
Смежные вопросы