我有一个使用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仅在按钮例程完成时执行,尽管它在循环内部。
有没有办法强迫它执行?
答案 0 :(得分:2)
只要您拨打setNeedsDisplay
的频率,iPhone每秒只会更新60次屏幕。你的循环将在不到1/60秒内执行。这就是为什么你只会看到最后一个状态。
如果您想通过一个按钮显示所有四种状态,则可以使用计时器或performSelector: afterDelay
来显示所有四种状态。有点复杂,但你去了。
答案 1 :(得分:-2)
调用setNeedsDisplay只标记要在下一个绘制周期重绘的视图。
要在方法中重绘它,可以显式调用drawRect: