У меня есть CAKeyframeAnimation, которая вызывает animationDidStart: и animationDidStop: finish:, как и ожидалось, когда анимации разрешено работать.
Когда я приостанавливаю анимацию во время прерываний (звонки, нажатие кнопки домой и т. Д.) AnimationDidStop: done: срабатывает с флагом NO, как и ожидалось.
Однако после перезапуска приостановленной анимации animationDidStart: и animationDidStop: закончен: никогда не запускаются снова. Анимация визуально продолжается и завершается, но я не получаю событие. Мне нужно знать, когда остановится анимация, чтобы я мог перезапустить игровой цикл.
Я следовал за этим для паузы / перезапуска анимации.
Пожалуйста, скажите мне, что я делаю не так. Спасибо!
- (void)takeFlight
{
CAKeyframeAnimation *pathAnimation = [CAKeyframeAnimation animationWithKeyPath:@"position"];
pathAnimation.calculationMode = kCAAnimationPaced;
pathAnimation.removedOnCompletion = NO;
pathAnimation.duration = FLY_ANIM_TIME;
pathAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut];
pathAnimation.delegate = self;
CGPoint endPoint = CGPointMake(self.view.frame.size.width/2, self.view.frame.size.height/3);
CGMutablePathRef curvedPath = CGPathCreateMutable();
CGPathMoveToPoint(curvedPath, NULL, xPos, yPos);
CGPathAddQuadCurveToPoint(curvedPath, NULL, -100.0, -50.0, 200.0, 100.0);
pathAnimation.path = curvedPath;
CGPathRelease(curvedPath);
[shipView.layer addAnimation:pathAnimation forKey:@"flyin"];
shipView.center = endPoint;
}
-(void)pauseFlight
{
CALayer *layer = (CALayer *)shipView.layer;
CFTimeInterval pausedTime = [layer convertTime:CACurrentMediaTime() fromLayer:nil];
layer.speed = 0.0;
layer.timeOffset = pausedTime;
}
-(void)resumeFlight
{
CALayer *layer = (CALayer *)shipView.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;
}
- (void)animationDidStart:(CAAnimation *)animation
{
NSLog(@"anim did start");
}
- (void)animationDidStop:(CAAnimation *)animation finished:(BOOL)flag
{
NSLog(@"anim did stop, flag is: %d", flag);
}