我需要在iOS上绘制折线图,并认为Core Graphics是表现最佳的候选者。
对于这个自定义图表控件,我创建了一个UIView的子类,其中包含一个名为drawChart的方法,该方法在滑块的值更改时调用,或者在数据更改时调用,因此非常频繁。
在此方法中是一个循环,用于计算每个数据集的x和y位置;
lines = [];
for var i:Int = startX; i < endX; ++i {
lines.append(LinePoint(x: xDC!, y: yDC!));
}
“lines”是一个行数组,Line是一个模型类,用于存储线段x和y值(CGPoint)。
最终,drawChart函数调用self.setNeedsDisplay();
然后我覆盖了如下所示的drawRect;
override func drawRect(rect: CGRect) {
if(lines.count == 0) {
return
}
var context = UIGraphicsGetCurrentContext();
CGContextSetLineCap(context, kCGLineCapRound);
CGContextSetLineWidth(context, 1);
CGContextSetStrokeColorWithColor(context, UIColor.blackColor().CGColor);
CGContextBeginPath(context);
var firstLine:LinePoint = lines[0]
CGContextMoveToPoint(context, firstLine.x, firstLine.y);
for var i:Int = 1; i<lines.count;++i {
var loopLine:LinePoint = lines[i]
CGContextAddLineToPoint(context, loopLine.x, loopLine.y);
}
CGContextStrokePath(context);
}
简而言之,这很慢,因为地狱,特别是向阵列附加线路的速度很快。
理想情况下,我想避免将线点缓存到数组并直接绘制它们,但是我无法获得drawChart方法的正确上下文(CGContextSetLineCap:无效上下文0x0),这就是为什么我认为它需要在drawRect方法中。
我怎样才能加快速度?任何帮助将非常感谢!