У меня есть процедура, которая рисует шестеренку с помощью CoreGraphics и drawRect. Я использовал кнопку для продвижения передач по этапам:
-(IBAction)advanceButtonPressed:(id)sender{
stage=stage+1;
if (stage==4) stage=0;
[self setNeedsDisplay];
}
Процедура рисования шестерни находится в drawRect, и зубья шестерни рисуются в новом положении в зависимости от значения stage, которое передается в drawRect. За четыре шага, по одному на нажатие кнопки, шестеренка поворачивается в новое положение (один сегмент по кругу).
Я изменил процедуру buttonPressed, чтобы она выполняла четыре этапа в цикле, поэтому мне нужно нажать кнопку только один раз, но это не работает:
-(IBAction)buttonPressed:(id)sender{
for (stage=0;stage<4;stage++){
NSLog(@"%i",stage);
[self setNeedsDisplay];
}
}
Мой NSLog показывает, что этап проходит через свои четыре значения, как и в более ранней процедуре. Но setNeedsDisplay выполняется только один раз (как подтверждает трассировка NSLog в drawRect), поэтому шестерня отображается в своем конечном положении, а не на промежуточных этапах. Похоже, что setNeedsDisplay выполняется только после завершения процедуры кнопки, несмотря на то, что она находится внутри цикла.
Есть ли способ заставить его выполняться?