我的代码如下:PieChart其中有很多这样的片。每个切片都绘制在它自己的CALayer
中,并使用addSublayer:
添加到自定义视图图层。如何提高CGContextDrawPath/drawInContext的速度:
问题是,我在用户拖动手指时动态更新饼图(他们可以通过拖动来编辑饼图值)。它运作良好,但重新绘制这些馅饼“切片”时,会有非常明显的滞后。我看过iOS分析工具,它显示> 50%的时间在CGContextDrawPath()
,因为每次用户移动一定的度数时,它必须重新绘制饼图切片。
我的问题是,我能做些什么来提高此代码的速度?有什么我失踪?另外作为一个附注,这段代码在iPad 2上运行良好(可接受的fps级别),但在iPad 3上它运行起来可怕,根据我的估计,它会慢两倍。任何人都可以解释吗?它只是视网膜显示器吗?
-(void)drawInContext:(CGContextRef)ctx {
// Create the path
CGRect insetBounds = CGRectInset(self.bounds, self.strokeWidth, self.strokeWidth);
CGPoint center = CGPointMake(self.bounds.size.width/2, self.bounds.size.height/2);
CGFloat radius = MIN(insetBounds.size.width/2, insetBounds.size.height/2);
CGContextBeginPath(ctx);
CGContextMoveToPoint(ctx, center.x, center.y);
CGPoint p1 = CGPointMake(center.x + radius * cosf(self.startAngle), center.y + radius * sinf(self.startAngle));
CGContextAddLineToPoint(ctx, p1.x, p1.y);
int clockwise = self.startAngle > self.endAngle;
CGContextAddArc(ctx, center.x, center.y, radius, self.startAngle, self.endAngle, clockwise);
CGContextClosePath(ctx);
// Color it
CGContextSetFillColorWithColor(ctx, self.fillColor.CGColor);
CGContextSetStrokeColorWithColor(ctx, self.strokeColor.CGColor);
CGContextSetLineWidth(ctx, self.strokeWidth);
CGContextDrawPath(ctx, kCGPathFillStroke);
}
这么认为...这是一个巨大的耻辱。有什么我做错了,你可以看到吗?或者我可以做什么来让事情变得更快? – 2013-03-13 16:38:43