UILabel添加渐变图层

4
为了给UILabel添加背景渐变,我使用以下代码。
在使用渐变之前,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];

尝试将渐变添加到视图中,然后将标签作为该视图的子视图添加。如果您将标签的颜色设置为 [UIColor clearColor],则应该会显示渐变和文本。 - kmikael
所以你的意思是,不能给UILabel设置渐变。根据你的说法,我将不得不不必要地添加一个UIView,设置它的渐变,然后再添加UILabel。很好,但是如果要添加多个UILabel,引入一个对象会增加内存占用。 - weber67
我认为每个UILabel多一个普通的UIView不会对内存产生太大影响。 - kmikael
1个回答

6
您可能需要将标签设置在另一个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];

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接