也就是说,如果
[self setNeedsDisplayInRect:rect];但是如果我们的drawRect代码不关心rect并绘制所有内容,那么iOS系统还能以某种方式提高绘制速度吗?(或者可能只有很少的改进?)这个问题可能需要非常熟悉UIKit/CoreGraphics的人。
发布于 2012-04-23 15:35:23
答案有几种可能是肯定的:
drawRect:没有使用矩形,您稍后也可以返回到该代码来对其进行优化。正如你可能知道的,一个很好的方法-如果可能的话-是使用矩形来决定你画的是什么。super之前,您可以重写setNeedsDisplayInRect:以将setNeedsDisplay:消息发送到子视图,并且只将框架与矩形相交的子视图发送到子视图。(UIView的实现可能已经做到了这一点。您应该对其进行测试。)发布于 2012-04-23 15:34:27
如果您的drawRect:实现忽略了传入的rect并绘制整个视图,则对传递给setNeedsDisplayInRect:的rect的任何优化都是无效的。
"needs“rect是直接传递的;它唯一的作用是让drawRect:实现用来忽略不必要的绘制。一旦进入drawRect:实现,系统就无法判断您在传递的rect之外的绘制是否是有意的,因此所有绘制都会发生(包括性能影响)。
根据您绘制的是什么以及如何绘制,将drawRect:实现限制为至少使用传入的rect并不是太难。你想要绘制的所有东西都有一个边界矩形,无论它是一大块文本、一条贝塞尔曲线路径、一幅图像,还是你正在用某种颜色填充的矩形。使用CGRectIntersectsRect()测试围绕绘制的每一位--这样不会将绘制完全限制在传入的rect中,但至少可以消除需要绘制的任何未接触到该rect的内容。
https://stackoverflow.com/questions/10276216
复制相似问题