强制setNeedsDisplay

时间:2013-01-06 23:33:04

标签: ios cocoa-touch uikit setneedsdisplay

我有一个使用CoreGraphics和drawRect绘制齿轮的例程。我用了一个按钮来推进各个阶段的齿轮:

- (IBAction为)advanceButtonPressed:(ID)发送方{

stage=stage+1;

if (stage==4) stage=0;

[self setNeedsDisplay];

}

绘制齿轮的程序在drawRect中,齿轮齿根据阶段的变化而被拉到新的位置,并传递给drawRect。按下每个按钮一个步骤,齿轮转到新位置(圆圈周围的一个区段)。

我更改了buttonPressed例程,让它在循环中完成四个阶段,所以我只需按一次按钮,但它不起作用:

- (IBAction为)buttonPressed:(ID)发送方{

for (stage=0;stage<4;stage++){

    NSLog(@"%i",stage);

[self setNeedsDisplay];
}

}

我的NSLog显示该阶段经历了四个值,就像在早期例程中一样。但是setNeedsDisplay只执行一次(作为drawRect中的NSLog跟踪确认),因此齿轮显示在其最终位置但不显示在中间阶段。看起来setNeedsDisplay仅在按钮例程完成时执行,尽管它在循环内部。

有没有办法强迫它执行?

2 个答案:

答案 0 :(得分:2)

只要您拨打setNeedsDisplay的频率,iPhone每秒只会更新60次屏幕。你的循环将在不到1/60秒内执行。这就是为什么你只会看到最后一个状态。

如果您想通过一个按钮显示所有四种状态,则可以使用计时器或performSelector: afterDelay来显示所有四种状态。有点复杂,但你去了。

答案 1 :(得分:-2)

调用setNeedsDisplay只标记要在下一个绘制周期重绘的视图。

要在方法中重绘它,可以显式调用drawRect: