Стоп 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];
}
}];
}
Я хочу остановить это одушевленный Когда viewController
viewWillDisappear
:
- (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 по этой ссылке.