舉例說明
要實(shí)現(xiàn)的效果:

image.png
實(shí)現(xiàn)思路:
//add gradient layer to label bg view
CAGradientLayer *gradientLayer = [CAGradientLayer layer];
gradientLayer.frame = _labelBgView.bounds;
//設(shè)置漸變色
[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圖層, 是以透明度為基礎(chǔ)的, 只看透明度, 即如果mask的某一點(diǎn)像素的透明度為1.0, 不透明, 則不進(jìn)行遮罩, 不顯示mask的內(nèi)容;如果mask圖層的某一點(diǎn)像素的透明度為0.0, 完全透明, 則進(jìn)行遮罩, 顯示mask的內(nèi)容, 進(jìn)行遮罩.
漸變層為彩色漸變, 且遮罩圖層與漸變圖層大小一樣, 而label的背景顏色為clearcolor透明度為0.0, 需要進(jìn)行遮罩, 因此背景色每一個(gè)像素需要顯示, 而且把漸變色遮住了, 而文字部分默認(rèn)顏色為黑色, 透明度為1.0, 不需要顯示這部分的遮罩.
綜上所訴, 遮罩圖層達(dá)到的效果類似剪紙鏤空的效果, 正好把文字鏤空了, 因此顯示的是漸變色的效果.