5

レイヤーに画像をロードする方法は次のとおりです。

CALayer *layer = [[CALayer alloc]init];

layer.contents = (id) [UIImage imageNamed:@"image.png"].CGImage;

次に、レイヤーをサブレイヤーとしてビューに次のように追加します。

ビューであなたを仮定します

[self.layer addSublayer:layer];

今、画像の配列をアニメーションとしてロードしたいので、最終的に画像をアニメーション化します。

実際にアニメーションを実行する前に、次のことをテストしました。

[values insertObject:(id)[UIImage imageNamed:path].CGImage atIndex:i];

もちろん、各画像を正しいインデックスに入力するループが実行されます...そしてCGImage、アニメーション用に..の配列を取得しています。

私はこの配列を印刷し、これを見ました:

CGImage 0x17d900

CGImage 0x17f4e0

したがって、値はそこにあります..エラーは発生しません..しかし、画像が表示されません...

アイデアがあれば教えてください....

4

1 に答える 1

5

これは、私のプロジェクトの 1 つで問題なく動作したコード スニペットです。

CAKeyframeAnimation *animation = [CAKeyframeAnimation animationWithKeyPath: @"contents"];
animation.calculationMode = kCAAnimationDiscrete;
animation.duration = 1.0;
animation.values = values; // NSArray of CGImageRefs
[layer addAnimation: animation forKey: @"contents"];

しかし、アニメーション フレームや古い iPhone/iPod の画像が大きかったため、深刻なパフォーマンスの問題が発生しました。これに遭遇した場合の秘密の要素は、事前にレンダリングされた画像 (IIRC、それらはプライベートCABackingStoreクラスで表されます) を使用することです。簡単に言えば、正しいサイズの CALayer を作成し、これを使用drawInContext:して 1 つのアニメーション フレームを描画します。次に、アニメーション フレームをループ処理して、レイヤーにフレーム イメージをフィードし、それを送信してdisplay、そのコンテンツ プロパティを配列に保存します。事前にレンダリングされた画像を何らかの方法で操作しようとしない限り、キャッシュ手法は安全です。基本的には、単にlayer1.contents = layer2.contents.

パフォーマンスの問題がない限り、上記の実装に時間を無駄にしないでください。

于 2011-01-31T19:39:54.103 に答える