在我的情况下,在调用每个drawRect:
后不会立即调用setNeedsDisplay
。例如,我认为以下代码与我的情况相同。
for (int i = 0; i < 100; ++i)
{
[self setNeedsDisplay];
}
答案 0 :(得分:8)
只有及时调用当视图的实际内容发生变化时,您有责任通知系统您的视图需要重新绘制。您可以通过调用视图的视图的setNeedsDisplay或setNeedsDisplayInRect:方法来完成此操作。这些方法让系统知道它应该在下一个绘图周期中更新视图。 因为它会等到下一个绘图周期来更新视图,所以您可以在多个视图上调用这些方法来同时更新它们。
drawRect:
才能绘制下一帧,这意味着整个循环将导致drawRect:
仅在下一次渲染迭代时被调用一次。这节省了不必要的计算,因为它避免了绘制永远不会在屏幕上显示的帧。它还允许您在代码中的不同位置进行多项更改,每次都通知视图需要刷新而不会降低性能,因为调用setNeedsDisplay
仅告诉绘图系统需要重绘下一帧;它不会强制立即呈现可能永远不会在屏幕上显示的帧。
答案 1 :(得分:1)
searchTwitter("love", n=10)
只有标记视图需要再次显示。实际的绘图调用在主线程的下一个runloop迭代中完成,一次。这允许绘图系统进行一些优化并将重复调用“组合”到setNeedsDisplay
。