Стоп animateWithDuration

У меня есть цикл анимации в viewController

- (void)moveAnimating
{
    [UIView animateWithDuration:2.0f animations:^{
        _backgroundView.center = CGPointMake(self.center.x , self.center.y - kMoveDistanceHeight);
     } completion:^(BOOL finished) {
        if (_backgroundView.animating)
        {
           [_backgroundView moveAnimating];
        }
    }];
}

Я хочу остановить это одушевленный Когда viewControllerviewWillDisappear:

- (void)viewWillDisappear:(BOOL)animated
{
    [super viewWillDisappear:animated];
    _backgroundView.animating = NO;
    [_backgroundView.layer removeAllAnimations];
}

Потому что анимация конфликтует с dismissViewcontrollerAnimation,

Вопрос:

[_backgroundView.layer removeAllAnimations];

не работа...

Как остановить анимацию?

Помоги мне, спасибо.

2 ответа

Решение

Вы отменяете анимацию правильно:

[_backgroundView.layer removeAllAnimations];

Но вы можете забыть об импорте QuartzCore.h:

#import <QuartzCore/QuartzCore.h>

Если это не поможет, попробуйте это:

[CATransaction begin];
[_backgroundView.layer removeAllAnimations];
[CATransaction commit];

Если это не поможет, попробуйте добавить эту строку в код выше:

[CATransaction flush];

Решение от @KlimczakM не работает для меня.

Я запускаю блок 'animateWithDuration', который перемещается и отображает изображение, и я использую следующий код для приостановки и возобновления анимации:

-(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;
}

Это из документации Apple по этой ссылке.

Другие вопросы по тегам