mask

      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..

你可能感兴趣的:(mask)