iOS 漸變色實(shí)現(xiàn)

實(shí)現(xiàn)方式

iOS實(shí)現(xiàn)控件背景顏色漸變實(shí)現(xiàn)方式校摩,我所知道的目前有三種。第一種:用圖片代替阶淘,簡(jiǎn)單直接在控件上面放一張漸變的圖片衙吩,即可實(shí)現(xiàn)。缺點(diǎn)是不能夠動(dòng)態(tài)變化溪窒,比如淘寶所用的提示語坤塞,背景色就是漸變的,顯然用圖片并不可取澈蚌。當(dāng)然安卓開發(fā)可以用點(diǎn)九圖摹芙。第二種:使用Quartz2D實(shí)現(xiàn)漸變。第三種:使用CAGradientLayer實(shí)現(xiàn)惜浅。也就是今天我所介紹的瘫辩。當(dāng)然是線性漸變。

具體步驟

屬性介紹

在實(shí)現(xiàn)漸變效果前坛悉,先來熟悉CAGradientLayer幾個(gè)屬性伐厌。startPoint和endPoint是漸變色起始坐標(biāo)與結(jié)束坐標(biāo)。這一點(diǎn)很重要裸影。還需要知道漸變色坐標(biāo)左上角為(0, 0),右下角為(1,1)挣轨。也就是說要想實(shí)現(xiàn)對(duì)角漸變可設(shè)置起始坐標(biāo)和結(jié)束坐標(biāo)分別為(0,0),(1,1)或者(0,1),(1,0)。如果要左右線性則設(shè)置(0,0),(1,0)轩猩。colors為設(shè)置幾種顏色得漸變卷扮,是一個(gè)數(shù)組格式。locations是一個(gè)位置集合均践,范圍是0到1晤锹。與colors中的顏色是一一對(duì)應(yīng)的,如果是左右漸變locations里面只有一個(gè)0.5元素彤委。則漸變色是從x=0.5軸向右漸變鞭铆,所以locations里面存儲(chǔ)的不是顏色區(qū)域,是漸變色開始的位置信息焦影。同理如果是對(duì)角線漸變則是x=y或者x= 1-y直線函數(shù)的位置開始漸變(只是兩種顏色漸變)车遂。關(guān)于漸變色基本上就是這幾個(gè)屬性封断。屬性含義弄清楚了,下面就好做了舶担。

具體實(shí)現(xiàn)

在控制器里添加如下代碼

    UIView *view = [[UIView alloc]initWithFrame:CGRectMake(20, 20, 200, 200)];
    view.backgroundColor = [UIColor whiteColor];
    CAGradientLayer *cagLayer = [CAGradientLayer layer];
    cagLayer.frame = view.frame;
    cagLayer.startPoint = CGPointMake(0, 0);
    cagLayer.endPoint = CGPointMake(1, 0);
    cagLayer.colors = @[(id)[UIColor redColor].CGColor, (id)[UIColor blueColor].CGColor];
    [view.layer addSublayer:cagLayer];
    [self.view addSubview:view];

沒有添加locations的情況效果如下
QQ20171129-141754.png

可以看到是左右漸變
添加 cagLayer.locations =@[@0.5];效果如下

QQ20171129-142112.png

可以看紅色到明顯是從x=0.5軸向右漸變坡疼。一般都是對(duì)稱漸變,所以locations可以不設(shè)置衣陶。

下面再加入一種黃色不設(shè)置locations的效果
QQ20171129-142522.png

擴(kuò)展部分

上面舉的例子都是背景色漸變柄瑰,下面舉的例子則是文字顏色漸變。

實(shí)現(xiàn)原理

    UILabel *label = [[UILabel alloc] init];
    
    label.text = @"你牛逼呀祖搓,你牛逼呀";
    
    [label sizeToFit];
    
    label.center = CGPointMake(200, 100);
    
    [self.view addSubview:label];
    
    // 創(chuàng)建漸變層
    CAGradientLayer *gradientLayer = [CAGradientLayer layer];
    
    gradientLayer.frame = label.frame;
    
    // 設(shè)置漸變層的顏色狱意,隨機(jī)顏色漸變
   gradientLayer.colors = @[(id)[UIColor redColor].CGColor, (id)[UIColor blueColor].CGColor]; 
   //mask原理:默認(rèn)會(huì)顯示mask層底部的內(nèi)容,如果漸變層放在mask層上拯欧,就不會(huì)顯示了
    // 添加漸變層到控制器的view圖層上
    [self.view.layer addSublayer:gradientLayer];    
    // mask層工作原理:按照透明度裁剪详囤,只保留非透明部分,文字就是非透明的镐作,因此除了文字藏姐,其他都被裁剪掉,這樣就只會(huì)顯示文字下面漸變層的內(nèi)容该贾,相當(dāng)于留了文字的區(qū)域羔杨,讓漸變層去填充文字的顏色。
    // 設(shè)置漸變層的裁剪層
    self.gradientLayer.mask = label.layer;  
    // 父層改了杨蛋,坐標(biāo)系也就改了兜材,需要重新設(shè)置label的位置,才能正確的設(shè)置裁剪區(qū)域逞力。
    label.frame = self.gradientLayer.bounds;
    

參考文檔

(https://www.cnblogs.com/YouXianMing/p/3793913.html)這篇寫的很詳細(xì)
(http://www.reibang.com/p/0c785ee7ef35)這篇也很好

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末曙寡,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子寇荧,更是在濱河造成了極大的恐慌举庶,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,113評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件揩抡,死亡現(xiàn)場(chǎng)離奇詭異户侥,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)峦嗤,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門蕊唐,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人烁设,你說我怎么就攤上這事刃泌。” “怎么了?”我有些...
    開封第一講書人閱讀 153,340評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵耙替,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我曹体,道長(zhǎng)俗扇,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,449評(píng)論 1 279
  • 正文 為了忘掉前任箕别,我火速辦了婚禮铜幽,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘串稀。我一直安慰自己除抛,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評(píng)論 5 374
  • 文/花漫 我一把揭開白布母截。 她就那樣靜靜地躺著到忽,像睡著了一般。 火紅的嫁衣襯著肌膚如雪清寇。 梳的紋絲不亂的頭發(fā)上喘漏,一...
    開封第一講書人閱讀 49,166評(píng)論 1 284
  • 那天,我揣著相機(jī)與錄音华烟,去河邊找鬼翩迈。 笑死,一個(gè)胖子當(dāng)著我的面吹牛盔夜,可吹牛的內(nèi)容都是我干的负饲。 我是一名探鬼主播,決...
    沈念sama閱讀 38,442評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼喂链,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼返十!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起衩藤,我...
    開封第一講書人閱讀 37,105評(píng)論 0 261
  • 序言:老撾萬榮一對(duì)情侶失蹤吧慢,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后赏表,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體检诗,經(jīng)...
    沈念sama閱讀 43,601評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評(píng)論 2 325
  • 正文 我和宋清朗相戀三年瓢剿,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了逢慌。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,161評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡间狂,死狀恐怖攻泼,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤忙菠,帶...
    沈念sama閱讀 33,792評(píng)論 4 323
  • 正文 年R本政府宣布何鸡,位于F島的核電站,受9級(jí)特大地震影響牛欢,放射性物質(zhì)發(fā)生泄漏骡男。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評(píng)論 3 307
  • 文/蒙蒙 一傍睹、第九天 我趴在偏房一處隱蔽的房頂上張望隔盛。 院中可真熱鬧,春花似錦拾稳、人聲如沸吮炕。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽龙亲。三九已至,卻和暖如春震鹉,著一層夾襖步出監(jiān)牢的瞬間俱笛,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評(píng)論 1 261
  • 我被黑心中介騙來泰國(guó)打工传趾, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留迎膜,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,618評(píng)論 2 355
  • 正文 我出身青樓浆兰,卻偏偏與公主長(zhǎng)得像磕仅,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子簸呈,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評(píng)論 2 344

推薦閱讀更多精彩內(nèi)容