CoreGraphicsとdrawRectを使用して歯車を描画するルーチンがあります。ボタンを使用して、ステージを介してギアを進めました。
-(IBAction)advanceButtonPressed:(id)sender {
stage=stage+1;
if (stage==4) stage=0;
[self setNeedsDisplay];
}
歯車を描画するためのルーチンはdrawRectにあり、歯車の歯は、drawRectに渡されるステージの値に応じて新しい位置に描画されます。ボタンを押すごとに1つずつ、4つのステップで、歯車が新しい位置(円の周りの1つのセグメント)に回転します。
buttonPressedルーチンを変更して、ループ内の4つのステージを実行するようにしたので、ボタンを1回押すだけで済みますが、機能しません。
-(IBAction)buttonPressed:(id)sender {
for (stage=0;stage<4;stage++){
NSLog(@"%i",stage);
[self setNeedsDisplay];
}
}
私のNSLogは、前のルーチンの場合と同じように、ステージが4つの値を通過することを示しています。ただし、setNeedsDisplayは(drawRectのNSLogトレースで確認されるように)1回だけ実行されるため、ギアは最終位置に表示されますが、中間段階には表示されません。setNeedsDisplayは、ループ内にあるにもかかわらず、ボタンルーチンが終了したときにのみ実行されるようです。
強制的に実行する方法はありますか?