我的代碼如下: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