Отже, припустимо, що ви створили анімацію за допомогою CABasicAnimation чи CAKeyframeAnimation і вам знадобилося її зациклити. Я нещодавно працював над такою, наче простою задачею, намагаючись робити зациклення через одне місце 🙂

Все виявилося простіше, варто було просто почитати документацію. У будь-якої CAAnimation є властивість repeatCount. Я танцював навколо неї, пробував делегатські методи на зразок animationDidStop, але, ще раз повторюю, треба було просто подивитися у документацію і вказати значенням repeatCount константу HUGE_VALF. Ця чарівна константа зациклює вашу анімацію навіки.

Приклад реалізації:

NSArray * animationValues = @[@0.0, @1.0, @1.0, @0.0];

CAKeyframeAnimation * smallCircleAnimation = [CAKeyframeAnimation animationWithKeyPath:@"opacity"];
smallCircleAnimation.duration = 3.0;
smallCircleAnimation.values = animationValues;
smallCircleAnimation.keyTimes = @[@0.0, @0.76, @0.86, @1.0];
smallCircleAnimation.repeatCount = HUGE_VALF; //ключовий момент де встановлюється вічна зацииклена анімація
smallCircleAnimation.removedOnCompletion = NO;

// Після створення анімації ми просто додаємо її до потрібної в’юшки (View) чи лейера (CALayer, CAShapeLayer)
[self.smallCircleLayer addAnimation:smallCircleAnimation forKey:nil];

Сподіваюся, що розкрив тему максимально розуміло. Якщо маєте питання з приводу анімації — пишіть, коментуйте, відповім якнайшвидше.