我有一个使用CoreGraphics和drawRect绘制齿轮的例程。我使用一个按钮在各个阶段推进齿轮:
-(IBAction)advanceButtonPressed:(Id)发送者{
stage=stage+1;
if (stage==4) stage=0;
[self setNeedsDisplay];}
绘制齿轮的例程是在drawRect中,根据stage的值在新的位置绘制齿轮轮齿,并将其传递给drawRect。在四个步骤中,每按一次按钮,齿轮就转到它的新位置(围绕圆圈的一段)。
我更改了buttonPressed例程,让它在循环中完成这四个阶段,因此我只需要按一次按钮,但它不起作用:
-(IBAction)buttonPressed:(Id)发送者{
for (stage=0;stage<4;stage++){
NSLog(@"%i",stage);
[self setNeedsDisplay];
}}
我的NSLog显示stage经历了它的四个值,就像它在前面的例程中一样。但是setNeedsDisplay只执行一次(正如drawRect中的NSLog跟踪所确认的那样),因此齿轮显示在其最终位置,而不是中间阶段。看起来setNeedsDisplay只在按钮例程结束时执行,尽管它在循环中。
有没有办法强制它执行?
发布于 2013-01-07 07:49:58
无论您多频繁地调用setNeedsDisplay,iPhone每秒只更新屏幕60次。您的循环将在不到1/60秒的时间内执行。这就是为什么你只能看到最后一个状态的原因。
如果您想通过按一下按钮来显示所有四种状态,那么您可以使用计时器或performSelector: afterDelay来显示所有四种状态。有点复杂,但这就对了。
发布于 2013-01-07 07:41:41
调用setNeedsDisplay只会标记要在下一个绘制周期重绘的视图。
要在你的方法中重画它,你可以显式调用drawRect:
https://stackoverflow.com/questions/14187961
复制相似问题