2011-08-11 2 views
2

私が基本的にしたいことは、シーケンスを作成するために高速のレート(60 /秒)で一連の画像を表示することです。私はタイマーを作成し、それが十分に速いかどうかを調べるつもりです。コアアニメーション画像の配列をアニメーション化する

アニメーションを使用してココアアプリに画像の配列を表示したい(最大60秒間)。

は、ここで私はこれまでに作成したアニメーションです:nsImageToCGImageRefは、私が他の場所で定義されてきた方法である

- (CAAnimation*)imageAnimation; 
{ 
    CGImageRef image1 = [self nsImageToCGImageRef:[NSImage imageNamed:@"1.png"]]; 
    CGImageRef image2 = [self nsImageToCGImageRef:[NSImage imageNamed:@"2.png"]]; 
    CGImageRef image3 = [self nsImageToCGImageRef:[NSImage imageNamed:@"3.png"]]; 

    CAKeyframeAnimation *animation = [CAKeyframeAnimation animationWithKeyPath:@"position"]; 

    NSArray *images = [NSArray arrayWithObjects:(id)image1, (id)image2, (id)image3, nil]; 

    [animation setValues:images]; 
    [animation setDuration:3.0]; 

    return animation; 
} 

。今、私はこのアニメーションを私の見解に加えるためにここからどこに行くべきか分からない。

+2

なぜdownvotesですか?問題は十分に明確ではないのですか? –

答えて

2

CVDisplayLinkを調べると、Macのディスプレイサブシステムがフレームを表示しようとするたびにコールバックを受け取ることができます。これにより、APIは更新が必要なときにのみコードを呼び出すため、フレームを落とさずに60fpsで画像を表示できます。

これは、タイマーをディスプレイと同期させることを心配する必要がなく、また、不必要な作業をしていないことを意味します。描画コードが遅い場合は、フレームレートを30fpsに減らすために、代替コールバックでのみ更新するなどの作業を行うこともできます。

0

まず、質問は十分に明確ではありません。質問が明確に達成したいことを言っておらず、今までコードで行ってきたことについて何も言わないので、あなたは言い換えることができます。

CAKeyframeAnimationは、アニメーションの時間中にレイヤのプロパティの値を指定するために使用されます。

プロパティの位置を持つキーフレームアニメーションを作成しています。その場合、アニメーション中に設定するレイヤーの位置値を与える必要があります。イメージを変更しようとしています。あなたのコードから理解できるものから、イメージ値でアニメーションプロパティの代わりにcontentsプロパティを設定する必要がありますが、滑らかなアニメーションは得られません。私は自分で試したことはありませんが、理論に基づいて、必要なことを考えています。あなたのコードはまったく動作していますか?私はそれが遅い場合でもあなたが必要とする方法ではないと思いますか?メッセージanimationWithKeyPathのプロパティ名 "position"を "contents"に変更するのが遅い場合でも私に教えてください。

テクスチャ付きアトラスが必要です。 URLを見てhttp://mysterycoconut.com/blog/2011/01/cag1/

これは、私があなたの質問から理解できるものに基づいて必要なものを示すかもしれません。

+0

ご質問が不明な場合は、申し訳ありません。基本的には、キーフレームごとに1つずつ(毎秒60画像)の一連の画像があります。私がしたいのは、それらの画像を順番に表示してアニメーションを作成することです。 –

0

いくつかの研究と試行の後、タイマーを代わりに使用し、次の利用可能な画像に変更するのが最善の方法のようです。

+0

代わりに 'CVDisplayLink'を試してみることをお勧めします。私の答えを見てください。 –

関連する問題