举例说明
要实现的效果:

实现思路:
//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, 不需要显示这部分的遮罩.
综上所诉, 遮罩图层达到的效果类似剪纸镂空的效果, 正好把文字镂空了, 因此显示的是渐变色的效果.
网友评论