IOS使用CGContextRef动态画折线图

- (void)drawRect:(CGRect)rect {
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextClearRect(context, rect);
    CGContextSetLineWidth(context, _lineWidth);                                 //设置画笔宽度
    CGContextSetFillColorWithColor(context, [[self backgroundColor] CGColor]);  //设置背景填充颜色
    CGContextFillRect(context, rect);                                           //填充背景

    CGContextSetStrokeColorWithColor(context, _lineColor.CGColor);              //设置画笔颜色

    //arr 为实时获取的动态数据数组
    for (int i = 0; i < _arr.count; i ++) {
        if (i < _arr.count - 1) {
            CGPoint pp[2];
            [_arr[i] getBytes:&pp[0] length:sizeof(CGPoint)];
            [_arr[i+1] getBytes:&pp[1] length:sizeof(CGPoint)];

            CGContextMoveToPoint(context, pp[0].x, pp[0].y);
            CGContextAddLineToPoint(context, pp[1].x, pp[1].y);
            CGContextStrokePath(context);
        }
    }
}

- (void)addDataToArr:(CGFloat)data {
    if (!_arr)
        _arr = [[NSMutableArray alloc] init];

    CGPoint point;
    //MAX_X_COUNT表示在X轴上显示的最大个数,超过后则X轴向左移动,每次移动一个单位
    if (_arr.count >= MAX_X_COUNT) {
        //移动x轴
        CGRect frame = self.frame;
        frame.origin.x -= (self.frame.size.width / MAX_X_COUNT);
        frame.size.width += (self.frame.size.width / MAX_X_COUNT);
        self.frame = frame;
    }
    point.x = _arr.count * (self.frame.size.width / MAX_X_COUNT);

    //如果当前值大于Y轴所代表的最大值,则将Y轴最大值扩大为当前值的2倍
    if (data > _maxYPower) {        //改变y的最大值为currentPower
        _maxYPower = data * 2;
    }
    point.y = data;

    //将实时获取的数据存入_arr中
    [_arr addObject:[NSData dataWithBytes:&point length:sizeof(CGPoint)]];
}

只需动态调用addDataToArr:后再调用[self.view setNeedDisplay]即可

时间: 2024-08-04 21:29:40

IOS使用CGContextRef动态画折线图的相关文章

IOS使用Core-Plot画折线图

关于Core-Plot的配置,大家可以参考我的上一篇博客:http://1.wildcat.sinaapp.com/?p=99 版权所有,转载请注明原文转自:http://blog.csdn.net/wildcatlele/article/details/25483923 大家可以到:http://1.wildcat.sinaapp.com/?p=102观看本篇博客更友好的排版格式 或者你英语好也可以参考github上的wiki介绍:https://code.google.com/p/core-

python中matplotlib画折线图实例(坐标轴数字、字符串混搭及标题中文显示)

最近在用python中的matplotlib画折线图,遇到了坐标轴 "数字+刻度" 混合显示.标题中文显示.批量处理等诸多问题.通过学习解决了,来记录下.如有错误或不足之处,望请指正. 一.最简单的基本框架如下:已知x,y,画出折线图并保存.此时x和y均为数字. 1 # -*- coding: utf-8 -*- 2 3 import matplotlib.pyplot as plt #引入matplotlib的pyplot子库,用于画简单的2D图 4 import random 5

Cocos2d3.0 画折线图

实现用2dx画折线图,为以后用2dx开发应用做准备 下面记录下使用方法 auto lineView = DJLineChart::create(); std::vector<float> vec; vec.push_back(130); vec.push_back(520); vec.push_back(60); vec.push_back(0); vec.push_back(140); vec.push_back(100); vec.push_back(30); vec.push_back(

Java画折线图

??? JFreeChart 是开放源代码站点SourceForge.net 上的一个 JAVA 项目,它主要用来各种各样的图表,这些图表包括:饼图.柱状图 ( 普通柱状图以及堆栈柱状图 ).线图.区域图.分布图.混合图.甘特图以及一些仪表盘等等. ??? 应用jfreechart来画图需要两个jar包:jfreechart.jar和jcommon.jar,直接去官网下载就成: https://sourceforge.net/projects/jfreechart/files/ ?? 下载完成后

Matplotlib学习---用matplotlib画折线图(line chart)

这里利用Jake Vanderplas所著的<Python数据科学手册>一书中的数据,学习画图. 数据地址:https://raw.githubusercontent.com/jakevdp/data-CDCbirths/master/births.csv 准备工作:先导入matplotlib和pandas,用pandas读取csv文件,然后创建一个图像和一个坐标轴 import pandas as pd from matplotlib import pyplot as plt birth=p

unity 画折线图,饼型图插件

在unity中画折线图,和饼型图等数据分析图是很困难 的一件事,幸好我找到了一个插件很方便的解决了这件事,效果如下图: 折线图,饼型图,等. 运行效果如下: 百度网盘下载地址:链接:https://pan.baidu.com/s/10oLG1Zmffv7ASWG0pvx05w 提取码:lub1 如果链接失效,请留言. 原文地址:https://blog.51cto.com/14058389/2425723

Android画折线图、柱状图、饼图(使用achartengine.jar)

自从用了画折线的jar包之后,就不想再用canvas画布去画了,编程就是要站在巨人的肩膀上. 所需要的jar包achartenginejar 折线代码布局文件就不上传了很简单 另一种线的渲染器 扇形图代码 柱状图代码 属性总结部分代码 新测试代码下载地址 所需要的jar包:achartengine.jar 下载地址:http://download.csdn.net/detail/zhengyikuangge/9460642 折线代码(布局文件就不上传了,很简单): package com.exa

python的turtle模块画折线图

代码如下: import turtle yValues = [10.0,7.4,6.4,5.3,4.4,3.7,2.6] def main(): t = turtle.Turtle() t.hideturtle() drawLine(t,0,0,300,0) #画x轴 drawLine(t,0,0,0,175) #画y轴 #画折线 for i in range(6): drawLineWithDots(t,40 + (40 * i),15 * yValues[i],40 + (40 * (i+1

gnuplot画折线图

之前尝试用jfreechart画自定义横坐标的折线图或时序图,发现很复杂,后来改用gnuplot了. gnuplot在网上一搜就能找到下载地址. 安装完成后,主要是命令行形式的交互界面,至少比jfreechart进步一些... set xrange [0:240]  #设置x轴范围 set yrange [1:1.5]  #设置y轴范围 set xtics ("0" 0, "60" 60, "120" 120, "180" 1