ios環(huán)形占比圖實現(xiàn)

pexels-trung-nguyen-2747045.jpg

需求來源

項目中需要分析一次護(hù)理過程中,溫度占比,經(jīng)過和產(chǎn)品經(jīng)理一番討論之后,決定將表現(xiàn)方式由曲線圖改為環(huán)形占比圖。相比較曲線圖,環(huán)形占比圖能夠更加清晰的展示想要表達(dá)的東西(當(dāng)然也有實現(xiàn)成本低的原因),廢話不多說,來看一下如何實現(xiàn)一個環(huán)形占比圖。

設(shè)計圖

截屏2022-02-22 下午5.11.14.png

實現(xiàn)思路

如上圖,要實現(xiàn)這樣一個封閉的環(huán)形占比圖,需要分幾步來完成,首先,確定圓環(huán)的起始位置,確定首先需要繪制哪一個圓環(huán),然后根據(jù)每一個圓環(huán)的占比,將占比轉(zhuǎn)化為角度,然后使用繪制圓的方法,繪制出對應(yīng)的圓環(huán)即可。具體代碼如下:

實現(xiàn)代碼

繪制第一部分的圓環(huán),占比為1,總占比為7

CAShapeLayer *layer = [CAShapeLayer new];
layer.lineWidth = 20;
//圓環(huán)的顏色
layer.strokeColor = HEXCOLOR(0xC0FBFF).CGColor;
//背景填充色
layer.fillColor = [UIColor clearColor].CGColor;
//設(shè)置半徑為100
CGFloat radius = 81/2 - 20/2;
//按照順時針方向
BOOL clockWise = true;
//初始化一個路徑
//完整的圓
UIBezierPath *path = [UIBezierPath bezierPathWithArcCenter:CGPointMake((70), (82)/2) radius:radius startAngle:(-0.5f * M_PI) endAngle:(-0.5f * M_PI) + 0.14 * M_PI * 2 clockwise:clockWise];
layer.path = [path CGPath];
[self.layer addSublayer:layer];

繪制第二部分的圓環(huán),和第一個圓環(huán)的圓心保持一致,起點為第一個圓環(huán)的終點,占比為1.6,總占比為7

CAShapeLayer *layer1 = [CAShapeLayer new];
layer1.lineWidth = 20;
//圓環(huán)的顏色
layer1.strokeColor = HEXCOLOR(0xFFE86A).CGColor;
//背景填充色
layer1.fillColor = [UIColor clearColor].CGColor;
//初始化一個路徑
UIBezierPath *path1 = [UIBezierPath bezierPathWithArcCenter:CGPointMake((70), (82)/2) radius:radius startAngle:(-0.5f * M_PI) + 0.14 * M_PI * 2 endAngle:((-0.5f * M_PI) + 0.37 * M_PI * 2) clockwise:clockWise];
layer1.path = [path1 CGPath];
[self.layer addSublayer:layer1];

繪制第三部分的圓環(huán),和第一個圓環(huán)和第二個圓環(huán)的圓心保持一致,起點為第二個圓環(huán)的終點,占比為4,總占比為7

CAShapeLayer *layer2 = [CAShapeLayer new];
layer2.lineWidth = (20);
//圓環(huán)的顏色
layer2.strokeColor = HEXCOLOR(0xFFB94B).CGColor;
//背景填充色
layer2.fillColor = [UIColor clearColor].CGColor;
//初始化一個路徑
UIBezierPath *path2 = [UIBezierPath bezierPathWithArcCenter:CGPointMake((70), (82)/2) radius:radius startAngle:((-0.5f * M_PI) + 0.37 * M_PI * 2) endAngle:M_PI*1.5 clockwise:clockWise];
layer2.path = [path2 CGPath];
[self.layer addSublayer:layer2];

結(jié)尾

至此,環(huán)形占比圖實現(xiàn)已經(jīng)完成了??傮w來說,實現(xiàn)還是比較簡單的,如果有哪塊不懂的地方??梢栽u論區(qū)留言,我會及時回復(fù)。

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

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

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