我目前正在使用CGContextDrawLayerInRect在drawRect中绘制CGLayer。这经常被称为。有没有办法通过只绘制已更改的CGLayer部分而不是drawRect中的整个CGLayer来减少开销?
-(void)drawRect:(CGRect)rect {
CGContextRef currentContext = UIGraphicsGetCurrentContext();
CGContextDrawLayerInRect(currentContext, [self bounds], _backgroundLayer);
}
答案 0 :(得分:0)
rect参数确实描述了需要重绘的区域。除了使用它来限制你重绘多少,没有。调用drawrect时,您不知道系统对您的图层做了什么 - 例如,您可以将整个视图预呈现为系统动画的新上下文。
你真的看到了糟糕的表现吗?也许您的绘图代码可以通过其他方式进行优化。
答案 1 :(得分:0)
我认为这几乎是你所能得到的优化。可能不太经常调用setNeedsDisplay吗?如果这对你来说太慢了,那么你最好的选择就是使用OpenGL!
答案 2 :(得分:0)
也许尝试完全消除-drawRect:绘制到UIImageView或CALayer中,让它处理它。