如果我经常调用setneedsdisplay,那么调用drawrect的频率是多少?这是为什么?

时间:2015-05-05 07:21:44

标签: ios drawrect setneedsdisplay

在我的情况下,在调用每个drawRect:后不会立即调用setNeedsDisplay。例如,我认为以下代码与我的情况相同。

for (int i = 0; i < 100; ++i)
{
    [self setNeedsDisplay];
}

2 个答案:

答案 0 :(得分:8)

来自documentation

  

当视图的实际内容发生变化时,您有责任通知系统您的视图需要重新绘制。您可以通过调用视图的视图的setNeedsDisplay或setNeedsDisplayInRect:方法来完成此操作。这些方法让系统知道它应该在下一个绘图周期中更新视图。 因为它会等到下一个绘图周期来更新视图,所以您可以在多个视图上调用这些方法来同时更新它们。

只有及时调用

drawRect:才能绘制下一帧,这意味着整个循环将导致drawRect:仅在下一次渲染迭代时被调用一次。这节省了不必要的计算,因为它避免了绘制永远不会在屏幕上显示的帧。它还允许您在代码中的不同位置进行多项更改,每次都通知视图需要刷新而不会降低性能,因为调用setNeedsDisplay仅告诉绘图系统需要重绘下一帧;它不会强制立即呈现可能永远不会在屏幕上显示的帧。

答案 1 :(得分:1)

searchTwitter("love", n=10) 只有标记视图需要再次显示。实际的绘图调用在主线程的下一个runloop迭代中完成,一次。这允许绘图系统进行一些优化并将重复调用“组合”到setNeedsDisplay