Цепная анимация UIView с временными интервалами
Мне нужно анимировать 3 UIViews (Fade In / Out). Длительность 1 анимации составляет 0,6 с (цикл постепенного появления / выпадения 0,6 + 0,6 с). Но мне нужно запустить анимацию за 0,2 секунды.
Первая анимация должна быть запущена за 0,0 секунды.Вторая анимация должна быть запущена через 0,2 секунды.Третья анимация должна быть запущена за 0,4 секунды.И все они должны быть зациклены «до бесконечности» (до какого-то триггера).
Что имею на данный момент:
- (void)playAnimation {
isAnimated = YES;
[self animateView:firstView afterDelay:0.0];
[self animateView:secondView afterDelay:0.2];
[self animateView:thirdView afterDelay:0.4];
}
- (void)stopAnimation {
isAnimated = NO;
}
- (void)animateView:(UIView *)animatedView afterDelay:(float)delay {
if(isAnimated) {
[UIView animateWithDuration:0.6 delay:delay options:UIViewAnimationOptionTransitionNone
animations:^ {
animatedView.alpha = 1.0;
} completion:^(BOOL finished) {
[UIView animateWithDuration:0.6 animations:^ {
animatedView.alpha = 0.0;
} completion:^(BOOL finished) {
[self animateView:animatedView afterDelay:0.0];
}];
}];
}
}
Этот код работает непредсказуемо. Иногда анимация просмотра работает так, как я хочу (с фазой 0,2 секунды), иногда она запускается в одно и то же время ... Какой будет правильный способ сделать это? Я также пытался удалитьafterDelay:
расстаться с сигнатурой метода и запустить метод animateView таким же образом:
[self performSelector:@selector(animateView:) withObject:thirdView afterDelay:0.6];
ОБНОВИТЬ
Я заметил, что анимация «ломается», когда тяжелая сеть работает в фоновом режиме (загрузка больших изображений с помощью AFNetworking). Я не против, если анимация немного «зависнет» (хотя я предпочитаю вообще не иметь задержек), но я действительно хочу, чтобы фазы всех анимаций были связаны (с одинаковой разностью фаз).
Чтобы облегчить понимание проблемы, я добавил графики. Y - альфа, X - время. Лучшие 3 графика - то, что я хочу иметь. Нижние - то, что у меня сейчас есть. Выделенная область, где проблема приходит. Вы можете видеть, что анимация второго вида останавливается на 0,2 секунды и синхронизируется с третьей. Таким образом, они начинают мигать в той же фазе. Это только один пример. Иногда они могут нормально анимироваться, иногда все 3 представления «синхронизируются» за несколько циклов анимации и мигают в одной фазе ...