- (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]即可