美文网首页
iOS UILabel指定区域(CGRect)文字修改颜色

iOS UILabel指定区域(CGRect)文字修改颜色

作者: 前行的骆驼 | 来源:发表于2019-11-29 14:46 被阅读0次

修改UILabel指定区域(CGRect)文字修改颜色,需要创建一个指定区域的CALayer,并将其作用于UILabel的父视图,通过将UILabel的图层layer映射给指定区域的CALayer的mask来进行设置。因为是将UILabel的图层layer映射给指定区域的CALayer的mask,所以不能给UILabel设置backgroundColor等属性,让UILabel的layer中只有文字图层。

先假设titleLabel是父视图superView上的一个视图,而我们现在要使titleLabel的gradientRect区域的颜色变为一个redColor到blueColor的渐变色:

1.首先我们需要绘制UILabel的文字颜色图层:

    CAGradientLayer * labelLayer = [CAGradientLayer layer];

    labelLayer.startPoint = CGPointMake(0.0,1.0);

    labelLayer.endPoint = CGPointMake(1.0,1.0);

    labelLayer.frame =titleLabel.frame;

    labelLayer.colors =@[(id)titleLabel.textColor.CGColor,(id)titleLabel.textColor.CGColor];

2.接下来绘制指定区域的文字颜色图层:

    CAGradientLayer * subLayer = [CAGradientLayer layer];

    subLayer.startPoint = CGPointMake(0.0,1.0);

    subLayer.endPoint = CGPointMake(1.0,1.0);

    subLayer.frame =gradientRect;//注意这个gradientRect是指定区域相对于父视图superView的坐标,因为这个CALayer是要作用于父视图superView的

    subLayer.colors =@[(id)[UIColor redColor].CGColor,(id)[UIColor blueColor].CGColor];

    subLayer.cornerRadius =gradientRect.size.height/2.0;

    [labelLayer addSublayer:subLayer];

3.将UILabel的图层layer映射给指定区域的CALayer的mask,我们想要获得UILabel的图层layer,需要在UILabel的布局加载到superView上后设置。因此我们需要(方法一)在superView的-(void)layoutSubviews;方法中设置,或者也可以(方法二)调用[superView layoutIfNeed]方法后进行设置,当然这个方法有时实际上并不能成功加载布局,所以建议使用方法一:

    [labelLayer removeFromSuperlayer];

    [self.layer addSublayer:labelLayer];

    labelLayer.mask =titleLabel.layer;

相关文章

网友评论

      本文标题:iOS UILabel指定区域(CGRect)文字修改颜色

      本文链接:https://www.haomeiwen.com/subject/xsfgwctx.html