mask, 一直不明白 这个属性的作用,官方文档这样解释 -- An optional layer whose alpha channel is used to mask the layer’s content. 看后仍然一头雾水,不求甚解的我就暂时把它当作遮罩来对待. 后来,写文字渐变色的时候用到了mask,又认认真真的看了一遍对它的介绍,好像有些头绪了,写下来,记录下对它的理解,方便以后再来看看.
// 创建UILabel
UILabel *label = [[Label alloc] init];
label.text = @"我就是渐变色,渐变渐变~~";
label.frame = CGRectMake(100, 100, 200, 50);
[self.view addSubview:label];
// 创建渐变层
CAGradientLayer *gradientLayer = [CAGradientLayer layer];
gradientLayer.frame = label.frame;
// 设置渐变层的颜色,随机颜色渐变
//randomCorlor UIColor的分类中扩充的方法,获取随机色
gradientLayer.colors = @[(id)[UIColor randomColor].CGColor, (id)[UIColor randomColor].CGColor,(id)[UIColor randomColor].CGColor];
// 此时,让哪一层layer当mask层呢?
//我先让gradientLayer 当了 label.layer.mask = gradientLayer ; 发现不行
//mask只能显示该层下面的内容,mask层得内容并不显示,因此渐变色层就不能显示了
//mask层 就像我们做剪纸画得样线(比喻或许不太恰当),它本身并不显示,只是按照它不透明的部分来裁剪把它当作mask的那个layer.
// 所以为了使label上的子为渐变色,添加渐变层到控制器的view图层上,让label的layer 来作gradientLayer的mask层.
[self.view.layer addSublayer:gradientLayer];
gradientLayer.mask = label.layer;
//这样一来label.layer 一层 将从它原有的父层中移除,并不再显示,它的父层变为了gradientLayer,父层变了,坐标也就变了,需要改下label.frame,来裁剪gradientLayer
label.frame = gradientLayer.bounds;
//然后加个定时器来改变渐变层的颜色
NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:0.1f target:self selector:@selector(changeColor) userInfo:nil repeats:YES];
//changeColor 来改 gradientLayer的colors属性
这样一来 label上的字 就有渐变色的效果了
语死早o(╯□╰)o..