mask

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

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容