Существует ли способ приостановить CABasicAnimation?

У меня есть основная анимация вращения iPhone. Есть ли какой-либо способ, которым я могу "приостановить" анимацию так, чтобы позиция представления была сохранена? Я предполагаю один способ сделать, это должно было бы заставить анимацию "завершаться" вместо вызова, "удаляют" на нем, как я сделал бы это?

CABasicAnimation* rotationAnimation;
rotationAnimation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"];
rotationAnimation.toValue = [NSNumber numberWithFloat: M_PI * 2];
rotationAnimation.duration = 100;
rotationAnimation.cumulative = YES;
rotationAnimation.repeatCount = HUGE_VALF;
rotationAnimation.removedOnCompletion = NO;
rotationAnimation.fillMode = kCAFillModeForwards;
[myView.layer addAnimation:rotationAnimation forKey:@"rotationAnimation"];
45
задан mclaughlinj 21 February 2010 в 18:20
поделиться

2 ответа

Недавно появившаяся техническая заметка 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;
}

Редактировать:. В iOS 10 появился новый API - UIViewPropertyAnimator, который позволяет работать с анимацией более интерактивно, например, легко приостанавливать и возобновлять анимацию или "стремиться" к определенному значению прогресса.

151
ответ дан 26 November 2019 в 20:48
поделиться

Set current state of your view's layer to match the state of the presentationLayer, then remove the animation:

CALayer *pLayer = [myView.layer presentationLayer];
myView.layer.transform = pLayer.transform;
[myView.layer removeAnimationForKey:@"rotationAnimation"];
6
ответ дан 26 November 2019 в 20:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: