亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > iOS > 正文

iOS實現的多條折線圖封裝實例

2020-07-26 02:46:06
字體:
來源:轉載
供稿:網友

前言

有時候我們在處理一些數據的時候,需要用到折線圖來呈現數據,讓用戶能夠對數據更加清晰明,本文主要給大家介紹了關于iOS實現多條折線圖的相關內容,下面話不多說,來看看詳細的介紹吧。

效果圖如下:

1、封裝類

.h

#define XYQColor(r, g, b) [UIColor colorWithRed:(r)/255.0 green:(g)/255.0 blue:(b)/255.0 alpha:1.0]#define XYQRandomColor XYQColor(arc4random_uniform(256), arc4random_uniform(256), arc4random_uniform(256))#define MARGIN  30 // 坐標軸與畫布間距#define Y_EVERY_MARGIN 20 // y軸每一個值的間隔數#import <UIKit/UIKit.h>// 線條類型typedef NS_ENUM(NSInteger, LineType) { LineType_Straight, // 折線 LineType_Curve // 曲線};@interface BezierCurveView : UIView//初始化畫布+(instancetype)initWithFrame:(CGRect)frame;//畫多根折線圖-(void)drawMoreLineChartViewWithX_Value_Names:(NSMutableArray *)x_names TargetValues:(NSMutableArray *)targetValues LineType:(LineType) lineType;@end

.m

#import "BezierCurveView.h"static CGRect myFrame;@interface BezierCurveView ()@end
@implementation BezierCurveView//初始化畫布+(instancetype)initWithFrame:(CGRect)frame{ BezierCurveView *bezierCurveView = [[BezierCurveView alloc]init];  bezierCurveView.frame = frame; //背景視圖 UIView *backView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, frame.size.width, frame.size.height)]; backView.backgroundColor = [UIColor clearColor]; [bezierCurveView addSubview:backView]; myFrame = frame; return bezierCurveView;}
/** * 畫坐標軸 */-(void)drawXYLine:(NSMutableArray *)x_names{ UIBezierPath *path = [UIBezierPath bezierPath]; //1.Y軸、X軸的直線 [path moveToPoint:CGPointMake(MARGIN, CGRectGetHeight(myFrame)-MARGIN)]; [path addLineToPoint:CGPointMake(MARGIN, MARGIN)]; [path moveToPoint:CGPointMake(MARGIN, CGRectGetHeight(myFrame)-MARGIN)]; [path addLineToPoint:CGPointMake(CGRectGetWidth(myFrame), CGRectGetHeight(myFrame)-MARGIN)];// //2.添加箭頭// [path moveToPoint:CGPointMake(MARGIN, MARGIN)];// [path addLineToPoint:CGPointMake(MARGIN-5, MARGIN+5)];// [path moveToPoint:CGPointMake(MARGIN, MARGIN)];// [path addLineToPoint:CGPointMake(MARGIN+5, MARGIN+5)];// // [path moveToPoint:CGPointMake(CGRectGetWidth(myFrame), CGRectGetHeight(myFrame)-MARGIN)];// [path addLineToPoint:CGPointMake(CGRectGetWidth(myFrame)-5, CGRectGetHeight(myFrame)-MARGIN-5)];// [path moveToPoint:CGPointMake(CGRectGetWidth(myFrame), CGRectGetHeight(myFrame)-MARGIN)];// [path addLineToPoint:CGPointMake(CGRectGetWidth(myFrame)-5, CGRectGetHeight(myFrame)-MARGIN+5)]; //3.添加索引格 //X軸 for (int i=0; i<x_names.count; i++) { CGFloat X = MARGIN + (CGRectGetWidth(myFrame)-30)/x_names.count*(i+1)-(CGRectGetWidth(myFrame)-30)/x_names.count/2.0; CGPoint point = CGPointMake(X,CGRectGetHeight(myFrame)-MARGIN); [path moveToPoint:point]; [path addLineToPoint:CGPointMake(point.x, point.y-3)]; } //Y軸(實際長度為200,此處比例縮小一倍使用) for (int i=0; i<11; i++) { CGFloat Y = CGRectGetHeight(myFrame)-MARGIN-Y_EVERY_MARGIN*i; CGPoint point = CGPointMake(MARGIN,Y); [path moveToPoint:point]; [path addLineToPoint:CGPointMake(point.x+3, point.y)]; } //4.添加索引格文字 //X軸 for (int i=0; i<x_names.count; i++) { CGFloat X = MARGIN + (CGRectGetWidth(myFrame)-30)/x_names.count/2.0 + (CGRectGetWidth(myFrame)-30)/x_names.count*i-(CGRectGetWidth(myFrame)-30)/x_names.count/2.0; UILabel *textLabel = [[UILabel alloc] initWithFrame:CGRectMake(X, CGRectGetHeight(myFrame)-MARGIN, (CGRectGetWidth(myFrame)-60)/x_names.count, 20)]; textLabel.text = x_names[i]; textLabel.font = [UIFont systemFontOfSize:10]; textLabel.textAlignment = NSTextAlignmentCenter; textLabel.textColor = [UIColor blueColor]; [self addSubview:textLabel]; } //Y軸 for (int i=0; i<11; i++) { CGFloat Y = CGRectGetHeight(myFrame)-MARGIN-Y_EVERY_MARGIN*i; UILabel *textLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, Y-5, MARGIN, 10)]; textLabel.text = [NSString stringWithFormat:@"%d",10*i]; textLabel.font = [UIFont systemFontOfSize:10]; textLabel.textAlignment = NSTextAlignmentCenter; textLabel.textColor = [UIColor redColor]; [self addSubview:textLabel]; } //5.渲染路徑 CAShapeLayer *shapeLayer = [CAShapeLayer layer]; shapeLayer.path = path.CGPath; shapeLayer.strokeColor = [UIColor blackColor].CGColor; shapeLayer.fillColor = [UIColor clearColor].CGColor; shapeLayer.borderWidth = 2.0; [self.subviews[0].layer addSublayer:shapeLayer];}
/** * 畫多根折線圖 */-(void)drawMoreLineChartViewWithX_Value_Names:(NSMutableArray *)x_names TargetValues:(NSMutableArray *)targetValues LineType:(LineType) lineType{ //1.畫坐標軸 [self drawXYLine:x_names]; for (int j=0; j<targetValues.count; j++) { //2.獲取目標值點坐標 NSMutableArray *allPoints = [NSMutableArray array]; for (int i=0; i<[targetValues[j] count]; i++) {  CGFloat doubleValue = 2*[targetValues[j][i] floatValue]; //目標值放大兩倍  CGFloat X = MARGIN + (CGRectGetWidth(myFrame)-30)/x_names.count*(i+1)-(CGRectGetWidth(myFrame)-30)/x_names.count/2.0;  CGFloat Y = CGRectGetHeight(myFrame)-MARGIN-doubleValue;  CGPoint point = CGPointMake(X,Y);  UIBezierPath *path = [UIBezierPath bezierPathWithRoundedRect:CGRectMake(point.x-1, point.y-1, 2.5, 2.5) cornerRadius:2.5];  CAShapeLayer *layer = [CAShapeLayer layer];  layer.strokeColor = [UIColor purpleColor].CGColor;  layer.fillColor = [UIColor purpleColor].CGColor;  layer.path = path.CGPath;  [self.subviews[0].layer addSublayer:layer];  [allPoints addObject:[NSValue valueWithCGPoint:point]]; } //3.坐標連線 UIBezierPath *path = [UIBezierPath bezierPath]; [path moveToPoint:[allPoints[0] CGPointValue]]; CGPoint PrePonit; switch (lineType) {  case LineType_Straight: //直線  for (int i =1; i<allPoints.count; i++) {   CGPoint point = [allPoints[i] CGPointValue];   [path addLineToPoint:point];  }  break;  case LineType_Curve: //曲線  for (int i =0; i<allPoints.count; i++) {   if (i==0) {   PrePonit = [allPoints[0] CGPointValue];   }else{   CGPoint NowPoint = [allPoints[i] CGPointValue];   [path addCurveToPoint:NowPoint controlPoint1:CGPointMake((PrePonit.x+NowPoint.x)/2, PrePonit.y) controlPoint2:CGPointMake((PrePonit.x+NowPoint.x)/2, NowPoint.y)]; //三次曲線   PrePonit = NowPoint;   }  }  break; } CAShapeLayer *shapeLayer = [CAShapeLayer layer]; shapeLayer.path = path.CGPath; shapeLayer.strokeColor = XYQRandomColor.CGColor; shapeLayer.fillColor = [UIColor clearColor].CGColor; shapeLayer.borderWidth = 2.0; [self.subviews[0].layer addSublayer:shapeLayer]; }}

2、調用

#define SCREEN_W [UIScreen mainScreen].bounds.size.width#define SCREEN_H [UIScreen mainScreen].bounds.size.height
 //1.初始化 _bezierView = [BezierCurveView initWithFrame:CGRectMake(30, 30, SCREEN_W-60, 280)]; _bezierView.center = self.view.center; [self.view addSubview:_bezierView]; // 多根折線圖 [_bezierView drawMoreLineChartViewWithX_Value_Names:(NSMutableArray *)@[@"語文",@"數學",@"英語",@"物理",@"化學",@"生物",@"政治",@"歷史",@"地理"] TargetValues:(NSMutableArray *)@[@[@60,@20,@50,@30,@90,@30,@100,@70, @20],@[@20,@40,@20,@50,@30,@90,@30,@100,@70],@[@10,@30,@40,@70,@50,@30,@20,@10,@80]] LineType:LineType_Straight];

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對武林網的支持。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲免费av片| 91精品国产91久久久| 国产激情视频一区| www.亚洲男人天堂| 久久影视免费观看| 欧美日韩精品在线视频| 欧美成人午夜激情在线| 91精品视频网站| 国产精品海角社区在线观看| 日韩黄色在线免费观看| 欧美激情久久久久久| 成人免费自拍视频| 一区二区三区视频免费| 国产亚洲精品va在线观看| 欧美性xxxxx极品娇小| 国产不卡精品视男人的天堂| 高清欧美性猛交xxxx| 国产精品久久久久久久久久东京| 日韩欧中文字幕| 亚洲色图国产精品| 九九热精品视频国产| 国产精品男人爽免费视频1| 久久精品99久久香蕉国产色戒| 久久中文字幕在线| 91精品国产91久久久久久| 国内精品久久久久久影视8| 久久视频在线直播| 国产中文字幕日韩| 精品毛片网大全| 亚洲美女免费精品视频在线观看| 理论片在线不卡免费观看| 中文字幕在线观看日韩| 国产精品第2页| 欧美精品videofree1080p| 亚洲成avwww人| 一区二区三区www| 国产女人18毛片水18精品| 欧美与黑人午夜性猛交久久久| 中文字幕在线国产精品| 91中文字幕在线观看| 欧美日韩激情小视频| 精品成人69xx.xyz| 91亚洲国产精品| 亚洲最大福利网| 91亚洲精品一区| 亚洲a成v人在线观看| 91免费视频国产| 亚洲欧美日韩在线高清直播| 亚洲福利影片在线| 久久夜色精品国产| 好吊成人免视频| 国产一区二区三区视频| 日韩影视在线观看| 国产精品白丝av嫩草影院| 国产精品中文字幕久久久| 亚洲专区在线视频| 中文字幕在线观看日韩| 久久精品最新地址| 亚洲无线码在线一区观看| 国产精品网红福利| 国产乱人伦真实精品视频| 国产成人精品日本亚洲专区61| 欧美电影在线免费观看网站| 国产精品成人aaaaa网站| 北条麻妃一区二区在线观看| 亚洲欧美激情四射在线日| 狠狠爱在线视频一区| 日韩不卡中文字幕| 51午夜精品视频| 久久久97精品| 国产精品久久久久久婷婷天堂| 欧美劲爆第一页| 欧美日韩国产专区| 中文字幕亚洲欧美日韩2019| 国产精品第三页| 日韩av大片在线| 日韩av电影在线免费播放| 欧洲成人在线观看| 欧美性猛交xxxx乱大交极品| 亚洲国产欧美一区二区丝袜黑人| 亚洲精品一区中文字幕乱码| 亚洲精品小视频| 久久国产精品亚洲| 国产精品久久久久久av福利| 午夜精品在线观看| 国产一区二区丝袜高跟鞋图片| 欧美日韩xxxxx| 欧美精品久久久久久久免费观看| 最近2019中文字幕第三页视频| 成人免费福利视频| 久久久黄色av| 亚洲人成在线电影| 亚洲精品自在久久| 欧美日韩亚洲激情| 中文字幕精品在线视频| 日韩hd视频在线观看| 亚洲女成人图区| 国产精品直播网红| 欧美第一淫aaasss性| 欧美日韩国产999| 欧美国产日韩xxxxx| 成人羞羞国产免费| 亚洲成人xxx| 国产欧美最新羞羞视频在线观看| 中文字幕日韩综合av| 精品久久中文字幕久久av| 亚洲美女在线视频| 性金发美女69hd大尺寸| 欧美激情乱人伦一区| 日韩欧美中文字幕在线观看| 91精品国产一区| 久久久久亚洲精品国产| 日本高清视频一区| 欧美日本亚洲视频| 中文字幕亚洲欧美在线| 亚洲伦理中文字幕| 亚洲天堂开心观看| 精品久久久久久电影| 国产精品精品久久久| 亚洲三级免费看| 狠狠色香婷婷久久亚洲精品| 在线看日韩av| 最近的2019中文字幕免费一页| 日韩中文字幕第一页| 亚洲爱爱爱爱爱| 国产精品91免费在线| 国产精品视频999| 欧美一区二区大胆人体摄影专业网站| 久久69精品久久久久久久电影好| 成人免费高清完整版在线观看| 日韩免费看的电影电视剧大全| 欧美激情精品久久久久久变态| 亚洲欧洲激情在线| 久久久久久国产精品久久| 日韩欧美在线观看视频| 欧美电影第一页| 成人av电影天堂| 亚洲欧洲国产伦综合| 九九视频直播综合网| 久久久久国产精品www| 欧美亚洲国产精品| 国产ts人妖一区二区三区| 亚洲天堂成人在线视频| 欧美精品一区三区| 欧美成人激情图片网| 亚洲午夜av久久乱码| 亚洲国产美女精品久久久久∴| 国产精品丝袜高跟| 日韩av在线一区| 久久久久久久久久久av| 欧美成人午夜激情视频| 久久九九免费视频| 中国人与牲禽动交精品| 亚洲人成网站免费播放| 精品国产精品三级精品av网址| 久久这里有精品| 欧美电影在线观看| 欧美午夜丰满在线18影院| 亚洲午夜小视频| 最近的2019中文字幕免费一页| 最近中文字幕2019免费| 欧美日韩国产精品专区| 97视频在线观看免费高清完整版在线观看| 91在线精品播放|