我有一个使用 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 仅在按钮例程完成时才执行,尽管它位于循环内。
有没有办法强制它执行?