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

http://sxiaojian.com/2015/11/30/iOS-curve-gradient/


圓形漸變

最近產(chǎn)品提了一個(gè)需求,要求進(jìn)度條的進(jìn)度可以大于1。效果如下

效果圖上卡,實(shí)際上并不卡。

在開(kāi)始做之前,看了github上所有的progress相關(guān)的代碼,發(fā)現(xiàn)并沒(méi)有人實(shí)現(xiàn)過(guò)這樣的效果。蘋果apple watch應(yīng)用實(shí)現(xiàn)了,但是不知道蘋果是怎么實(shí)現(xiàn)的。

這個(gè)效果的難度就在于 曲線漸變 和 進(jìn)度能大于1。

cocoa touch提供的api都是直線漸變。而進(jìn)度可以大于1要求曲線的首和尾顏色不能想近,應(yīng)該相差最大。

iOS實(shí)現(xiàn)一個(gè)顏色漸變的弧形進(jìn)度條

這篇文章實(shí)現(xiàn)了一個(gè)曲線漸變,但是這個(gè)無(wú)法實(shí)現(xiàn)進(jìn)度條大于一。

最終要想實(shí)現(xiàn)曲線漸變只能自己實(shí)現(xiàn)了。

顏色的生成

一共需要兩個(gè)顏色,起始顏色和結(jié)束顏色。中間顏色的R、G、B值由progress線性生成。

CGFloat ratio =(float)i /(float)sectors;CGFloat R = beginR +(endR- beginR)* ratio;CGFloat G = beginG +(endG- beginG)* ratio;CGFloat B = beginB +(endB- beginB)* ratio;

漸變的生成

由于apple提供的api都是直線的,我就采取了微分的思想,將一個(gè)圓分為無(wú)數(shù)份,然后每一份繪制一點(diǎn)顏色。最終就形成了曲線漸變。

最終的實(shí)現(xiàn)

直接看代碼吧。demo在此

rounded矩形漸變

這個(gè)動(dòng)畫的實(shí)現(xiàn)就更有難度了。

動(dòng)畫由兩個(gè)CAReplicatorLayer組成,一個(gè)完成前半部分,一個(gè)完成后半部份,兩個(gè)layer的屬性完全一致,僅僅是另外一個(gè)layer旋轉(zhuǎn)了180度。最終效果是這樣。

一個(gè)CAReplicatorLayer的動(dòng)畫是這樣的

由于stroke end的取值是0-1,所以無(wú)法平滑的讓stroke一直保持一樣的長(zhǎng)度。為了實(shí)現(xiàn)效果,我采取的方法是創(chuàng)建一個(gè)一樣的CAReplicatorLayer并旋轉(zhuǎn)180度。

于是效果變成了這樣

然后在這兩個(gè)layer的superLayer添加mask,最終完成了要求的動(dòng)畫效果。

最難的是CAReplicatorLayer的創(chuàng)建,我創(chuàng)建了40個(gè)instance。

replicator.instanceCount? ? ? = 40;replicator.instanceDelay? ? ? = 0.01;replicator.instanceColor? ? ? = [UIColor colorWithRed:1 green: 0.373 blue:0 alpha:0.99].CGColor;replicator.instanceRedOffset? = 0.005;replicator.instanceGreenOffset = 0.005;replicator.instanceBlueOffset? = 0.005;replicator.instanceAlphaOffset = -0.03;replicator.instanceTransform? = CATransform3DIdentity;

里面的參數(shù)都經(jīng)過(guò)大量的試錯(cuò)與微調(diào)才調(diào)出這個(gè)效果。

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

相關(guān)閱讀更多精彩內(nèi)容

  • 一、CAShapelayer 我們知道可以不使用圖片情況下利用CGpath去構(gòu)建任意形狀的陰影。其實(shí)我們也可...
    小貓仔閱讀 1,821評(píng)論 0 5
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫(kù)、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 15,378評(píng)論 4 61
  • Core Animation Core Animation,中文翻譯為核心動(dòng)畫,它是一組非常強(qiáng)大的動(dòng)畫處理API,...
    45b645c5912e閱讀 3,158評(píng)論 0 21
  • 昨天突然有欲望寫感受,寫下之后,在晚上睡覺(jué)的時(shí)候,突然對(duì)我北交處女落三宮的意義有了理解。 因?yàn)槿盒侨龑m,在我的周遭...
    green66閱讀 233評(píng)論 0 0
  • 春日游,杏花吹滿頭 陌上誰(shuí)家年少,足風(fēng)流 萬(wàn)物復(fù)蘇的春日,草長(zhǎng)鶯飛 趁著陽(yáng)光正好,風(fēng)華正茂 踏青出游,撩撩景,撩撩...
    怪喵zz閱讀 2,813評(píng)論 0 1

友情鏈接更多精彩內(nèi)容