5

CALayer数マイクロ秒後に非表示にしようとしていCABasicAnimationますが、非表示をアニメーション化するために使用しています。

現時点で私は使用しようとしています

[aLayer setHidden:YES];

CABasicAnimation * hideAnimation = [CABasicAnimation animationWithKeyPath:@"hidden"];
[hideAnimation setDuration:aDuration];
[hideAnimation setFromValue:[NSNumber numberWithBool:NO]];
[hideAnimation setToValue:[NSNumber numberWithBool:YES]];
[hideAnimation setBeginTime:0.09];
[hideAnimation setRemovedOnCompletion:NO];
[hideAnimation setDelegate:self];

[alayer addAnimation:hideAnimation forKey:@"hide"];

しかし、これを実行すると、目的の beginTime を待つのではなく、レイヤーがすぐに非表示になります。

keyPath が「非表示」であるかどうかはわかりませんが、他のオプションが見つかりませんでした。ドキュメントにはhidden、 a のプロパティがアニメーション化可能であると記載されていますCALayer

私が探しているものを達成する正しい方法は何ですか?

4

5 に答える 5

3

代わりに、不透明度プロパティをアニメートしてみてください。1.0から0.0に変更すると、必要な効果が得られるはずです。

于 2010-07-15T22:52:41.077 に答える
3

CAMediaTiming.h から、beginTime プロパティについて次のように述べています。

親オブジェクトに関連するオブジェクトの開始時間 (該当する場合)。デフォルトは 0 です。

CACurrentMediaTime() + 目的の時間オフセットを使用する必要があります。

[hideAnimation setBeginTime:CACurrentMediaTime() + 0.09];
于 2010-11-17T14:29:14.870 に答える
2

これは元のポスターをうまくやるには遅すぎると確信していますが、他の人には役立つかもしれません. hiddenプロパティが変更されたときにアニメーションを暗黙的にすることを除いて、私は似たようなことをしようとしています。トムが言うようopacityに、レイヤーの非表示プロパティへの変更はすぐに有効になるように見えるため、その場合はアニメーション化は機能しません (アニメーションを で遅らせてもbeginTime)。

標準のインプリシット アクションはフェード トランジション ( CATransitiontype = kCATransitionFade) を使用しますが、これはレイヤー全体で動作し、同時に別のアニメーションを実行したいため、互換性のない操作です。

多くの実験の後、私は最終的に上記の @Kevin のコメントと --- こんにちは! ---それは実際に機能します!だから私はそれを呼び出したかったので、解決策は将来の検索者にとってより目に見えるようになりました:

CAKeyframeAnimation* hiddenAnim = [CAKeyframeAnimation animationWithKeyPath:@"hidden"];
hiddenAnim.values = @[@(NO),@(YES)];
hiddenAnim.keyTimes = @[@0.0, @1.0];
hiddenAnim.calculationMode = kCAAnimationDiscrete;
hiddenAnim.duration = duration;

これにより、期間が終了するまで非表示が遅延します。グループ内の他のプロパティ アニメーションと組み合わせて、レイヤーが消える前に効果を確認します。(これを不透明アニメーションと組み合わせて、別のアニメーションを実行しながらレイヤーをフェードアウトさせることができます。)

ありがとう、ケビン!

于 2013-12-17T21:48:54.010 に答える
0
    CABasicAnimation *endAnimation = [CABasicAnimation animationWithKeyPath:@"opacity"];
    endAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
    [endAnimation setFromValue:[NSNumber numberWithFloat:1]];
    [endAnimation setToValue:[NSNumber numberWithFloat:0.0]];
    [endAnimation setBeginTime:AVCoreAnimationBeginTimeAtZero];
    endAnimation.duration            = 5;
    endAnimation.removedOnCompletion = NO;
    [alayer addAnimation:endAnimation forKey:nil];
于 2017-04-14T05:23:29.323 に答える