我正在实现以下图形drawRect函数,但它使用超过50%的CPU - 任何关于如何解决这个问题的想法?我只画了几条随机线,但我希望它们都有不同的宽度。
- (void)drawRect:(CGRect)rect
{
[super drawRect:rect];
@autoreleasepool {
CGContextRef context = UIGraphicsGetCurrentContext();
CGMutablePathRef path = CGPathCreateMutable();
float width = rect.size.width;
int nbLine=10; // i want to draw 10 paths
for (int iLine=1;iLine<nbLine;iLine++){
float Pathwidth=0.8*(nbLine-(float)iLine)/nbLine;
CGContextBeginPath(context);
CGContextSetLineWidth(context, Pathwidth); //each path should have its own width
CGPathMoveToPoint(path, NULL, 0,0);
for (int i=0;i<10;i++){
float x=width/(i+1);
float y=1;//for this example, I just put a fixed number here - it's normally an external variable
CGPathAddQuadCurveToPoint(path, NULL, x+width/10, y, x,0);
}
CGContextAddPath(context, path);
CGContextStrokePath(context);
}
CGPathRelease(path);
}
}
谢谢你!
答案 0 :(得分:0)
您可以尝试一些事项。
答案 1 :(得分:0)
如果按性能,可以使用GLKView。 Core Drawing基于OpenGL,为图形清晰度和质量设置了大量优化。但是,如果这些选项让您放慢到不可用的程度,那么这可能是您最好的选择。
我的第二个建议是不要经常打电话。你说它每4毫秒被调用一次,即每秒250次。用户看不到细节,所以这是奢侈的。
我的第三个建议是使用UIView,绘制一次,然后根据你的y变量修改它的变换。看起来好像你可以做一个简单的y缩放来实现你想要做的事情(没有x改变,没有行的宽度改变(在绘制一次之后))。我可能会根据你的代码进行简化,但尝试一下是件好事。如果y比例变换太大,你也可以混合使用这个建议和你的代码并重绘。