IOS使用CGContextRef动态画折线图

//实时获取值后,只需每次调用此方法,就可将数据存入arr中
- (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)]];
}
- (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);
        }
    }
}

动态调用 addDataToArr后再调用self.view setNeedDisplay即可


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值