ユーザーがアニメーションの速度を変更できるようにしようとしています。ベジェ パスを使用して CAKeyframeAnimation を作成していますが、正しく表示して実行することができます。持続時間の異なる新しいアニメーション パスを作成して、速度を変更しようとしています。飛行機は最初に戻り(まだ修正しようとしていません)、速度が上がります。それらが描画されているパスは、アニメーションの速度が変更されていなかったときに消えます。飛行機が終了すると、最初にアニメーションが一時停止されたポイントに別の飛行機が表示されます。何が間違っているのかわかりません。私の質問は、 CAKeyframeAnimation の期間を動的に変更するこの質問に似ていますが、最終的にブロックを使用することについて OP が言ったことを理解していません。
//The first two methods are in a class subclassing UIView
/** Pause each plane's animation */
- (void)pauseAnimation
{    
    CFTimeInterval pausedTime = [[self layer] convertTime:CACurrentMediaTime() fromLayer:nil];
    [self layer].speed = 0.0;
    [self layer].timeOffset = pausedTime;
}
/** Resume each plane's animation */
- (void)resumeAnimation
{
    CFTimeInterval pausedTime = [[self layer] timeOffset];
    [self layer].speed = 1.0;
    [self layer].timeOffset = 0.0;
    CFTimeInterval timeSincePause = [[self layer] convertTime:CACurrentMediaTime() fromLayer:nil] - pausedTime;
    for(SEPlane *plane in planes){
        plane.planeAnimationPath.speedMultiplier = 5;
        [plane.planeAnimationPath beginAnimation:self];
    }
    //[self layer].beginTime = timeSincePause;
}
//This method is in the class of planeAnimationPath
/** Begin animating plane along given path */
- (void)beginAnimation:(UIView *) view
{
    planeAnimation = nil;
    // Create animation layer for animating plane
    planeAnimation = [CAKeyframeAnimation animationWithKeyPath:@"position"];    
    planeAnimation.path = [bezierPath CGPath];
    planeAnimation.duration = approximateLength/(ANIMATION_SPEED * self.speedMultiplier);
    planeAnimation.calculationMode = kCAAnimationPaced;
    planeAnimation.fillMode = kCAFillModeForwards;
    planeAnimation.rotationMode = kCAAnimationRotateAuto;
    planeAnimation.removedOnCompletion = YES;
    [planeAnimation setDelegate:self];    
    // Add animation to image-layer
    [imageLayer addAnimation:planeAnimation forKey:animationKey];
    // Add image-layer to view
    [[view layer] addSublayer:imageLayer];
}