? ? ? mask, 一直不明白 這個屬性的作用,官方文檔這樣解釋 -- An optional layer whose alpha channel is used to mask the layer’s content. 看后仍然一頭霧水,不求甚解的我就暫時把它當作遮罩來對待. ? 后來,寫文字漸變色的時候用到了mask,又認認真真的看了一遍對它的介紹,好像有些頭緒了,寫下來,記錄下對它的理解,方便以后再來看看.
// 創(chuàng)建UILabel
UILabel *label = [[Label alloc] init];
label.text = @"我就是漸變色,漸變漸變~~";
label.frame = CGRectMake(100, 100, 200, 50);
[self.view addSubview:label];
// 創(chuàng)建漸變層
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 ; 發(fā)現(xiàn)不行
//mask只能顯示該層下面的內容,mask層得內容并不顯示,因此漸變色層就不能顯示了
//mask層 就像我們做剪紙畫得樣線(比喻或許不太恰當),它本身并不顯示,只是按照它不透明的部分來裁剪把它當作mask的那個layer.
// 所以為了使label上的子為漸變色,添加漸變層到控制器的view圖層上,讓label的layer 來作gradientLayer的mask層.
[self.view.layer addSublayer:gradientLayer];
gradientLayer.mask = label.layer;
//這樣一來label.layer 一層 將從它原有的父層中移除,并不再顯示,它的父層變?yōu)榱薵radientLayer,父層變了,坐標也就變了,需要改下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..