2011-01-31 11 views
5

方法は、単にこれです値:iPhone CALayerの画像配列の内容レイヤーに画像をロードする

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

だから値がある...と私はすべてのエラーを取得していないです..しかし、私は、画像が表示されません...

あなたのアイデアを持っている場合、私に教えてください....

+0

どのように表示するために、配列内容のアイテム間でアニメーションや切り替えを行っていますか? – hotpaw2

答えて

5

これがうまく働いたコードスニペットです

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を送信し、contentsプロパティをアレイ。キャッシングテクニックは、プレレンダリングされた画像を操作しない限り、安全です。基本的には、単にlayer1.contents = layer2.contentsを実行します。

パフォーマンスの問題がない限り、上記の実装に時間を費やすことはありません。

+0

はい私はkeyPathを見逃しました。 –