[英]On iOS, if drawRect doesn't use the rect that was passed in, does it matter if [self setNeedsDisplayInRect:rect] passes in a rect?
也就是说,如果
[self setNeedsDisplayInRect:rect];
会被调用,并为需要重绘的区域非常仔细地计算出rect
,但是如果我们的drawRect
代码不关心rect
还是仍然绘制所有内容,iOS系统还能以某种方式提高绘制速度吗? (或者可能没有什么改善?)这个问题可能需要一个非常熟悉UIKit / CoreGraphics的人。
有几种方法可能是肯定的:
drawRect:
不使用矩形,您也可以稍后返回该代码进行优化。 您可能已经知道,做到这一点的一种非常好的方法(如果可能的话)是使用矩形来决定要绘制的内容。 即使您现在不这样做,将来也可以这样做,现在指定更改的rect意味着要更改的东西要少得多。 setNeedsDisplayInRect:
来将setNeedsDisplay:
消息发送给子视图—以及只调用其框架与rect相交的子视图—才调用super
。 (并且UIView的实现可能已经做到了。您应该对其进行测试。) 如果您的drawRect:
实现忽略了传入的rect并绘制了整个视图,则传递给setNeedsDisplayInRect:
的rect的任何优化都是setNeedsDisplayInRect:
。
“需求显示”矩形直接通过; 它唯一的用处是drawRect:
实现用于忽略不必要的绘图。 输入drawRect:
实现后,系统将无法判断您在传递的rect之外的绘图是否是有意的,因此所有绘图实际上都已发生(包括性能影响)。
取决于您所绘制的内容和方式,将drawRect:
实现限制为至少利用传入的rect并不是很困难。您要绘制的所有内容都具有边界rect,无论是文本块还是文本块都可以。贝塞尔曲线路径或图像,或者只是矩形,您正在用某种颜色填充。 用CGRectIntersectsRect()
测试将每一位包围起来-您不会完全以这种方式将图形限制为通过rect,但是至少要消除不需要绘制的东西。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.