iOS CALayer的属性mask的使用

2019-01-29  本文已影响3人  大城子

举例说明

要实现的效果:


image.png

实现思路:

    //add gradient layer to label bg view
    CAGradientLayer *gradientLayer = [CAGradientLayer layer];
    gradientLayer.frame = _labelBgView.bounds;
    //设置渐变色
    [self setupGradientlayer:gradientLayer];

    //添加渐变色图层到view容器上
    [_labelBgView.layer addSublayer:gradientLayer];
    
    //add label to label bg view
    UILabel *label = [[UILabel alloc] initWithFrame:_labelBgView.bounds];

    //remember to set the bg color's alpha to 0
    label.backgroundColor = [UIColor clearColor];
    label.textAlignment = NSTextAlignmentCenter;
    label.textColor = [UIColor blueColor];
    label.text = @"天王老子天下无敌";
    label.font = [UIFont systemFontOfSize:30];
    [_labelBgView addSubview:label];

    gradientLayer.mask = label.layer;

分析:
CALayer的mask图层, 是以透明度为基础的, 只看透明度, 即如果mask的某一点像素的透明度为1.0, 不透明, 则不进行遮罩, 不显示mask的内容;如果mask图层的某一点像素的透明度为0.0, 完全透明, 则进行遮罩, 显示mask的内容, 进行遮罩.
渐变层为彩色渐变, 且遮罩图层与渐变图层大小一样, 而label的背景颜色为clearcolor透明度为0.0, 需要进行遮罩, 因此背景色每一个像素需要显示, 而且把渐变色遮住了, 而文字部分默认颜色为黑色, 透明度为1.0, 不需要显示这部分的遮罩.
综上所诉, 遮罩图层达到的效果类似剪纸镂空的效果, 正好把文字镂空了, 因此显示的是渐变色的效果.

上一篇 下一篇

猜你喜欢

热点阅读