Недавно появившаяся техническая заметка Apple QA1673 описывает, как приостановить / возобновить анимацию слоя.
Список приостановки и возобновления анимации приведен ниже:
-(void)pauseLayer:(CALayer*)layer
{
CFTimeInterval pausedTime = [layer convertTime:CACurrentMediaTime() fromLayer:nil];
layer.speed = 0.0;
layer.timeOffset = pausedTime;
}
-(void)resumeLayer:(CALayer*)layer
{
CFTimeInterval pausedTime = [layer timeOffset];
layer.speed = 1.0;
layer.timeOffset = 0.0;
layer.beginTime = 0.0;
CFTimeInterval timeSincePause = [layer convertTime:CACurrentMediaTime() fromLayer:nil] - pausedTime;
layer.beginTime = timeSincePause;
}
Edit:
В iOS 10 появился новый API - UIViewPropertyAnimator, который позволяет более интерактивно обрабатывать анимации, например, позволяет легко приостанавливать и возобновлять анимацию или «искать» ее для определенного значения прогресса.