1

次のコードを使用して、CALayer の opacity-property をアニメーション化しています。

メソッドでアニメーションを作成する:

+ (CABasicAnimation *)fadeIn:(float)begin duration:(float)duration remove:(BOOL)remove{

    CABasicAnimation *fadeAnimation = [CABasicAnimation animationWithKeyPath:@"opacity"];
    fadeAnimation.fromValue = [NSNumber numberWithFloat:0.0];
    fadeAnimation.toValue = [NSNumber numberWithFloat:1.0];
    fadeAnimation.additive = NO;
    fadeAnimation.removedOnCompletion = remove;
    fadeAnimation.beginTime = begin;
    fadeAnimation.duration = duration;
    fadeAnimation.fillMode = kCAFillModeBoth;

    return fadeAnimation;
}

レイヤーにアニメーションを追加する:

[overlayLayer addAnimation:[VideoComposerHelpers fadeIn:1.0 duration:0.5 remove:NO] forKey:nil];

これは完璧に機能しています。ただし、最初のアニメーションが終了した直後に、同じレイヤーに別のアニメーションを追加したいと考えています。

[overlayLayer addAnimation:[VideoComposerHelpers fadeOut:1.5 duration:0.5 remove:NO] forKey:nil]; // fadeOut is a method similar to fadeIn

レイヤーは 0.5 のデュレーションでフェードインし、その直後に 0.5 のデュレーションでフェードアウトします。ただし、これは機能しないようです。2番目のアニメーションの開始点が最初のアニメーションの終了点と同じだからでしょうか?

4

2 に答える 2

1

CABasicAnimation はデリゲートを持つことができます。デリゲートが送信されanimationDidStop:finished:ます。これで、チェーン内の次のアニメーションを要求できます。

ただし、あなたの場合、それは必要ありません。autoreversesYESのアニメーションを使用してください。

(ああ、and をいじらないください。それは単に間違っています。それらを使用する例も同様に間違っています。これらは中間の複雑なグループ化されたアニメーションでのみ必要です。)removedOnCompletionfillMode

于 2013-05-17T16:40:37.370 に答える