Проблема в том, что вы заменяете образ до того, как ОС получит возможность рисовать.Поскольку все эти три операции: изменение изображения, ожидание в течение 2 секунд, изменение изображения снова) происходят до того, как ваше действие кнопки вернется, вы препятствуете выполнению основного потока и, следовательно, обновлению экрана.Итак, происходит то, что через 2 секунды экран рисует изображение, которое вы недавно поместили на его место.
Вам нужно, чтобы ожидание происходило отдельно.Есть три типичных способа сделать это, каждый из которых имеет свои преимущества: - отправить себе отложенное сообщение, используя -performSelector:withObject:afterDelay:
- порождать другой поток или использовать очередь отправки, чтобы запустить поток в фоновом режиме для сна, а затем отправить сообщениеоттуда к основному потоку - или используйте таймер.
Я бы предложил использовать таймер, потому что его легко отменить, если вам нужно сделать что-то вроде перехода на другой экран.
NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:2.0 target: self selector: @selector(updateColor:) userInfo: nil repeats: NO];
// store the timer somewhere, so that you can cancel it with
// [timer invalidate];
// later as necessary
, а затем позже:
-(void)updateColor:(NSTimer*)timer
{
_yellowColor = [UIImage imageNamed: @"yellow.png"];
_view1.image = _yellowColor;
}
Если вы хотите, чтобы цвета чередовались, вы можете передать YES для значения repeat: значение в коде создания, а затем изменить -updateColor:
на переменный ... илиперейти к следующему цвету.