4

アニメーションを次のように設定しています。

self.testAnimation = [CAKeyframeAnimation animationWithKeyPath:@"TestAnimation"];

[self.animationImagesAsCGImages addObject:( id )[UIImage imageNamed:@"c1.png"].CGImage];
[self.animationImagesAsCGImages addObject:( id )[UIImage imageNamed:@"c2.png"].CGImage];
[self.animationImagesAsCGImages addObject:( id )[UIImage imageNamed:@"c3.png"].CGImage];
[self.animationImagesAsCGImages addObject:( id )[UIImage imageNamed:@"c4.png"].CGImage];

[self.animationKeyframeTimings addObject:[NSNumber numberWithFloat:0.0f]];
[self.animationKeyframeTimings addObject:[NSNumber numberWithFloat:0.25f]];
[self.animationKeyframeTimings addObject:[NSNumber numberWithFloat:0.5f]];
[self.animationKeyframeTimings addObject:[NSNumber numberWithFloat:0.75f]];

self.testAnimation.values          = self.animationImagesAsCGImages;
self.testAnimation.keyTimes        = self.animationKeyframeTimings;

self.testAnimation.repeatCount     = HUGE_VALF;
self.testAnimation.autoreverses    = NO;
self.testAnimation.calculationMode = kCAAnimationDiscrete;
self.testAnimation.duration        = 2.0f;

そして、それを次のように呼び出します。

[self.layer addAnimation:self.testAnimation forKey:@"TestAnimation"];

しかし、何も表示されていません。

最初のタイミングを 0.0f にする必要がある kCAAnimationDiscrete に関するスタックの投稿を他にもいくつか見ましたが、これはご覧のとおりです。

お知らせ下さい?

4

1 に答える 1

13

tl;dr: 次contentsのように、アニメーション キー パスを に変更します。

self.testAnimation = [CAKeyframeAnimation animationWithKeyPath:@"contents"];

機能しない理由

あなたが書いているとき、存在しないレイヤー[CAKeyframeAnimation animationWithKeyPath:@"TestAnimation"];のプロパティをアニメーション化しようとしています。TestAnimationしたがって、そのプロパティを変更しても視覚的な効果はありません。

animationWithKeyPath:addAnimation:forKey:

アニメーションを作成するときとアニメーションをレイヤに追加keyPathするときの の違いを見逃すことは珍しくありません。key

新しいアニメーションを作成するとき、アニメーション化する必要があるプロパティへの keyPath を指定できます。keyPath なしでアニメーションを作成する場合は、アニメーションの keyPath プロパティを使用して設定できます。

レイヤーにアニメーションを追加するときに、キーを指定できます。このキーは、CALayer の animationForKey: メソッドを使用してアニメーションにアクセスするためにのみ使用されます。

機能させる方法

値に画像を追加しているので、画像間でアニメーション化する必要があると想定しています。その場合は、代わりにcontentsプロパティをキーパスとして使用する必要があります。

contents プロパティのドキュメントから:

レイヤーのコンテンツを提供するオブジェクト。アニメート可能。

...

このプロパティを に設定するCGImageRefと、レイヤーのコンテンツの代わりに画像のコンテンツを表示できます。

于 2012-08-08T18:51:16.260 に答える