iOS UIBezierPath實(shí)現(xiàn)餅狀圖
本文實(shí)例為大家分享了iOS UIBezierPath實(shí)現(xiàn)餅狀圖的具體代碼,供大家參考,具體內(nèi)容如下
首先看效果圖:
代碼:
#import <UIKit/UIKit.h> NS_ASSUME_NONNULL_BEGIN @interface CircleView : UIView @property (nonatomic, copy) NSArray<NSNumber *> *valueArray; @end NS_ASSUME_NONNULL_END // #define S_W self.frame.size.width #import 'CircleView.h' @interface CircleView () @property (nonatomic, copy) NSArray<NSNumber *> *dataArray;@property (nonatomic, assign) CGFloat endAngleFloat; // 每個(gè)扇形起點(diǎn)角度 @end @implementation CircleView - (void)setValueArray:(NSArray<NSNumber *> *)valueArray { self.dataArray = valueArray; self.endAngleFloat = 0; [self creatUI];} - (void)creatUI { for (NSInteger i = 0; i<_dataArray.count; i++) { CAShapeLayer *shapeLayer = [CAShapeLayer layer]; shapeLayer.lineWidth = 1; shapeLayer.fillColor = [UIColor colorWithRed:arc4random()%256/255.0f green:arc4random()%256/255.0f blue:arc4random()%256/255.0f alpha:1].CGColor; shapeLayer.strokeColor = shapeLayer.fillColor; CGFloat valueFloat = [_dataArray[i] floatValue]; CGFloat angleFloat = valueFloat*2*M_PI/100; UIBezierPath *bezierPath = [UIBezierPath bezierPath]; [bezierPath moveToPoint:CGPointMake(S_W/2, S_W/2)]; [bezierPath addLineToPoint:CGPointMake(S_W*(1+cos(_endAngleFloat))/2, S_W*(1+sin(_endAngleFloat))/2)]; [bezierPath addArcWithCenter:CGPointMake(S_W/2, S_W/2) radius:S_W/2 startAngle:_endAngleFloat endAngle:angleFloat+_endAngleFloat clockwise:YES]; [bezierPath closePath]; shapeLayer.path = bezierPath.CGPath; [self.layer addSublayer:shapeLayer]; [self addLabelWithFloat:valueFloat angleFloat:angleFloat]; _endAngleFloat += angleFloat; }} - (void)addLabelWithFloat:(CGFloat)valueFloat angleFloat:(CGFloat)angleFloat { UILabel *label = [[UILabel alloc] init]; label.center = CGPointMake(S_W*(2+cos(angleFloat/2 + _endAngleFloat))/4, S_W*(2+sin(angleFloat/2 + _endAngleFloat))/4); label.bounds = CGRectMake(0, 0, 50, 50); label.text = [NSString stringWithFormat:@'%.f%%',valueFloat]; label.textColor = UIColor.whiteColor; label.textAlignment = NSTextAlignmentCenter; label.font = [UIFont systemFontOfSize:14]; [self addSubview:label];}
外部調(diào)用:
CircleView *view = [[CircleView alloc] initWithFrame:CGRectMake(20, 100, self.view.frame.size.width-40, self.view.frame.size.width-40)]; view.valueArray = @[@(10),@(20),@(30),@(40)]; [self.view addSubview:view];
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。
相關(guān)文章:
1. js實(shí)現(xiàn)跳一跳小游戲2. JVM之class文件結(jié)構(gòu)3. 編寫(xiě)高質(zhì)量JavaScript代碼4. js實(shí)現(xiàn)貪吃蛇小游戲(加墻)5. CSS linear-gradient屬性案例詳解6. Html5播放器實(shí)現(xiàn)倍速播放的方法示例7. Ajax報(bào)錯(cuò)400的參考解決辦法8. Python如何根據(jù)時(shí)間序列數(shù)據(jù)作圖9. Python進(jìn)行統(tǒng)計(jì)建模10. Python中Anaconda3 安裝gdal庫(kù)的方法
