2013-05-11 64 views
2

向UILabel添加背景渐变我使用下面的代码。UILabel add GradientLayer

在使用渐变之前,UILabel会像这样出现。

WithOut Gradient

现在,添加一个渐变我使用下面的代码。

CAGradientLayer *gradLayer=[CAGradientLayer layer]; 
    gradLayer.frame=self.myView.layer.bounds; 
    [gradLayer setColors:[NSArray arrayWithObjects:(id)([UIColor redColor].CGColor), (id)([UIColor cyanColor].CGColor),nil]]; 
    gradLayer.endPoint=CGPointMake(1.0, 0.0); 

    [self.myView.layer addSublayer:gradLayer]; 

然后UILabel如下,但没有文字。

With Gradient

我也试着在的UILabel层,但没有成功的底部添加图层。

[self.myView.layer insertSublayer:gradLayer atIndex:0]; 
+0

尝试添加渐变到一个视图,然后添加标签为视图的子视图。如果将标签的颜色设置为“[UIColor clearColor]”,则应显示渐变和文本。 – kmikael 2013-05-11 11:01:17

+0

所以你的意思是说,不能设置渐变到UILabel.Then按照你的说法,我将不得不不必要地添加UIView,设置其渐变,然后添加UILabel。不错,但是引入一个对象会增加内存占用量,如果要添加很多UILabel – weber67 2013-05-11 11:06:28

+0

我不认为每UILabel一个额外的普通'UIView'会影响内存。 – kmikael 2013-05-11 11:11:42

回答

5

你可能会需要,而不是设置在标签上不同的UIView的顶部:

UIView *labelBackground = [[UIView alloc] initWithFrame:self.label.frame]; 
self.label.backgroundColor = [UIColor clearColor]; 
self.label.frame = self.label.bounds; 

CAGradientLayer *gradLayer=[CAGradientLayer layer]; 
gradLayer.frame = labelBackground.layer.bounds; 
[gradLayer setColors:[NSArray arrayWithObjects:(id)([UIColor redColor].CGColor), (id)([UIColor cyanColor].CGColor),nil]]; 
gradLayer.endPoint=CGPointMake(1.0, 0.0); 

[labelBackground.layer addSublayer:gradLayer]; 

[labelBackground addSubview:self.label]; 

[self.view addSubview:labelBackground];