我目前正在使用CGContextDrawLayerInRect在drawRect中绘制一个CGLayer。这是经常被调用的。有没有办法通过在drawRect中只绘制发生变化的那部分CGLayer而不是整个CGLayer来减少开销?
-(void)drawRect:(CGRect)rect {
CGContextRef currentContext = UIGraphicsGetCurrentContext();
CGContextDrawLayerInRect(currentContext, [self bounds], _backgroundLayer);
}发布于 2009-05-03 09:33:13
rect参数描述了需要重新绘制的区域。除了用它来限制你重画的数量,没有。当调用drawrect时,您不知道系统对您的层做了什么-例如,您可以将整个视图预先渲染到系统动画的新上下文中。
你真的看到了糟糕的表现吗?也许你的绘图代码可以通过其他方式进行优化。
发布于 2009-05-03 17:44:01
我认为这是你能得到的最好的优化了。有没有可能减少调用setNeedsDisplay的频率?如果这对你来说太慢了,你的下一个最好的选择是使用OpenGL!
发布于 2011-01-11 18:44:54
也许可以尝试完全消除-drawRect:。绘制到UIImageView或CALayer中,并让它处理它。
https://stackoverflow.com/questions/816459
复制相似问题