你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> IOS使用CGContextRef動態畫折線圖

IOS使用CGContextRef動態畫折線圖

編輯:IOS開發綜合
- (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]即可
  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved