0

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

-(IBAction)advanceButtonPressed:(id)sender{

stage=stage+1;

if (stage==4) stage=0;

[self setNeedsDisplay];

}

绘制齿轮的例程在drawRect中,根据stage的vale将轮齿绘制到新的位置,传给drawRect。在四个步骤中,每个按钮按下一个,齿轮转到新位置(围绕圆圈的一个部分。)

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

-(IBAction)buttonPressed:(id)sender{

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

    NSLog(@"%i",stage);

[self setNeedsDisplay];
}

}

我的 NSLog 显示该阶段经历了它的四个值,就像在前面的例程中一样。但是 setNeedsDisplay 只执行一次(正如 drawRect 中的 NSLog 跟踪所证实的那样),因此齿轮显示在其最终位置,而不是中间阶段。看起来 setNeedsDisplay 仅在按钮例程完成时才执行,尽管它位于循环内。

有没有办法强制它执行?

4

2 回答 2

2

无论你多久打电话,iPhone 每秒只更新 60 次屏幕setNeedsDisplay。您的循环将在不到 1/60 秒的时间内执行。这就是为什么你只会看到最后一个状态。

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

于 2013-01-06T23:49:58.383 回答
-2

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

要在您的方法期间重绘它,您可以显式调用 drawRect:

于 2013-01-06T23:41:40.820 回答