CALayer绘制折线图
来源:互联网 发布:淘宝号信誉查询网址 编辑:程序博客网 时间:2024/05/20 14:42
calyer现在逐渐熟练,折线图的绘制有好几种,最常见的是CGContextRef和CALayer。
CGContextRef跟CALayer流程差不多,今天就简单把折线图的流程总结下。
第一步:画出坐标轴(没有箭头)。效果图如下:
-(void)drawAxes{ //起点 CGPoint startP = CGPointMake(20, 80); //坐标轴的拐点 CGPoint axesP = CGPointMake(20, self.view.frame.size.height - 80); //终点 CGPoint endP = CGPointMake(self.view.frame.size.width - 20, self.view.frame.size.height - 80);}
第二步:给坐标轴X、Y轴设定单位,相当于刻度
效果图如下:
-(void)drawLineX{ NSInteger month = 12; CGFloat oneth = (self.view.frame.size.width - 40) / 12; for (NSInteger i=0; i<month; i++) { UILabel *monthLable = [UILabel new]; monthLable.frame = CGRectMake(20+oneth*i, self.view.frame.size.height - 75, oneth, 20); monthLable.font = [UIFont fontWithName:@"Arial Rounded MT Bold" size:8]; monthLable.backgroundColor = [UIColor clearColor]; monthLable.textColor = [UIColor blackColor]; monthLable.text = [NSString stringWithFormat:@"%ld月",i+1]; monthLable.transform = CGAffineTransformMakeRotation(M_PI * 0.3); [self.view addSubview:monthLable]; }}-(void)drawLineY{ NSInteger month = 20; CGFloat oneth = (self.view.frame.size.height - 160) / 20; for (NSInteger i=month; i>0; i--) { UILabel *degreeLable = [UILabel new]; degreeLable.frame = CGRectMake(0,70 + (oneth *i), 20, oneth); degreeLable.font = [UIFont fontWithName:@"MarkerFelt-Thin" size:8]; degreeLable.backgroundColor = [UIColor clearColor]; degreeLable.textAlignment = NSTextAlignmentCenter; degreeLable.textColor = [UIColor blackColor]; degreeLable.numberOfLines = 0; degreeLable.text = [NSString stringWithFormat:@"%ld度",(15-i)*3]; [self.view addSubview:degreeLable]; }}
第三步:绘画出坐标轴的背景(这一步纯粹是为了美观);效果图如下:
-(void)makeUpgradedBedding{ CAGradientLayer *graditLayer = [CAGradientLayer layer]; graditLayer.frame = CGRectMake(23, 77, self.view.frame.size.width - 40, self.view.frame.size.height - 160);}
第四步:绘画出虚线:即每一个单位刻度的对应高度的虚线;效果图如下:
-(void)makeUpDashLine{ NSInteger month = 19; CGFloat oneth = (self.view.frame.size.height - 160) / 20; for (NSInteger i=month; i>0; i--) { //起点 CGPoint startP = CGPointMake(22, 80 + (oneth *i)); //终点 CGPoint endP = CGPointMake(self.view.frame.size.width - 20, 80 + (oneth *i)); }}
第五步:画出折线图,最后终于要上大头戏了。效果图如下:
- (void)dravLine{ CGFloat oneheight = (self.view.frame.size.height - 160) / 12; CGFloat onewidth = (self.view.frame.size.width - 40) / 12; //十二个月的坐标 CGPoint JanuaryPoint = CGPointMake(22, self.view.frame.size.height - 80); CGPoint FebruaryPoint = CGPointMake(22+onewidth, self.view.frame.size.height - 80-oneheight); CGPoint MarchPoint = CGPointMake(22+onewidth *2, self.view.frame.size.height - 80-oneheight*7); CGPoint AprilPoint = CGPointMake(22+onewidth*3, self.view.frame.size.height - 80-oneheight*4); CGPoint MayPoint = CGPointMake(22+onewidth*4, self.view.frame.size.height - 80-oneheight*10); CGPoint JunePoint = CGPointMake(22+onewidth*5, self.view.frame.size.height - 80-oneheight*7); CGPoint JulyPoint = CGPointMake(22+onewidth*6, self.view.frame.size.height - 80-oneheight*6); CGPoint AugustPoint = CGPointMake(22+onewidth*7, self.view.frame.size.height - 80-oneheight*9); CGPoint SeptemberPoint = CGPointMake(22+onewidth*8, self.view.frame.size.height - 80-oneheight*8); CGPoint OctoberPoint = CGPointMake(22+onewidth*9, self.view.frame.size.height - 80-oneheight*10); CGPoint NovemberPoint = CGPointMake(22+onewidth*10, self.view.frame.size.height - 80-oneheight*9); CGPoint DecemberPoint = CGPointMake(22+onewidth*11, self.view.frame.size.height - 80-oneheight); //下面的这块代码实现折线走势}
以上就是完成折线图的所有代码,完全是按照CALayer利用UIBezierPath写的。
代码部分不太全,如果想要下载的可以去我的资源库下载.m文件。下载CALayer折线图代码
0 0
- CALayer绘制折线图
- CALayer绘制图层
- C#绘制折线图
- WPF绘制折线图
- EXT3绘制折线图
- android 绘制折线图
- android绘制折线图
- highcharts绘制折线图
- android绘制折线图
- achartengine绘制折线图
- 绘制折线图
- echarts绘制折线图
- 折线图的绘制
- html5绘制折线图
- 绘制折线图
- HelloCharts绘制折线图
- MPAndroidChart绘制折线图
- Matplotlib绘制折线图
- 算法---散列表
- async-validator的使用说明
- Hive 数据倾斜总结()
- Oracle试图--v$event_name
- 因系统版本差异而引起的datepicker样式改变
- CALayer绘制折线图
- 【工作效率】Facebook内部25个高效工作PPT指南
- 5-3+一点点
- Manacher计算回文子串-O(n)
- org.springframework.web.context.request.RequestContextListener作用
- SpringMVC源码剖析(二)- DispatcherServlet的前世今生
- Linux 服务器带宽异常跑满分析解决
- spark-submmit视频(2017年2月8日-9日)
- 中小电商如何与全球400余家快递物流公司做接口对接