2012-04-18 16 views
1

画像をアニメーション化する必要があります。私は多数の画像を持っており、これはビデオとして再生する必要があります。再生の間に、私はいくつかの画像を変更する必要がありますが、サーバーで更新されます。再生すると自動的にこの新しい画像が更新されます。アニメーション内の画像を動的に変更するIOS

私はUIImageViewを使用しようとしました。アニメーションを制御することはできません。 その後、イメージ配列をvaluesプロパティに提供するCAKeyframeAnimationを試しました。アニメーションを再生して一時停止することができました。しかし、ここでも私は再生中に動的にイメージを変更することはできません。

誰でもこの問題の解決にお手伝いできますか?

おかげ MIA

答えて

0

UIImageViewのアニメーションシステムは非常に限られています。 2つの画像ビューを使って独自の実装を行うことをお勧めします。

あなたはより私はあなたのための方法を書かれている1つのImageViewのとUIView animateWithDuration

を使用してフェードインとフェードアウトの画像を変更することになります。ご注意ください:私はそれをテストしていません。

それは2本使用UIImageViews

-(void)performAnimationOfFrameAtIndex:(NSNumber*)indexNum 
{   
    int index = [indexNum intValue]; 
    if(index >= frames.count) 
    { 
     return; 
    } 
    UIImage *img = [frames objectAtIndex:index]; 

    UIImageView *imgIn; 
    UIImageView *imgOut; 
    if(index % 2 == 0) 
    { 
     imgIn = imgv1; 
     imgOut = imgv2; 
    } 
    else { 
     imgIn = imgv2; 
     imgOut = imgv1; 
    } 
    imgIn.image = img; 
    [self.view sendSubviewToBack:imgIn]; 

    [UIView animateWithDuration:0.1 animations:^{ 
     imgIn.alpha = 1; 
     imgOut.alpha = 0; 
    } completion:^(BOOL finished) { 
     [self performSelectorOnMainThread:@selector(performAnimationOfFrameAtIndex:) withObject:[NSNumber numberWithInt:index+1] waitUntilDone:NO]; 
    }]; 

} 
+0

私は100フレームあります。私は3つの画像ビューを使用し、最初に3を配置し、次にこれらの画像ビューで次の3画像を置き換える必要があります。少し詳しく教えていただけますか? – mia

+0

私の編集した回答を見る... – EsbenB

0

あなたは「フレーム」と呼ばれる配列に、あなたのフレームを持っており、2 UIIMageViewが互いにいわゆる「imgv1」と「imgv2」の上に置かれていることを前提とし、それらを交換。

アニメーション「UIView」に弱い参照がある場合は、アニメーションが完了ブロックで終了しているかどうかを確認してください。それ以外の場合、別のビューに移動するとパフォーマンスの問題が発生する可能性があります。アニメーションメソッドへの再帰呼び出しは続行されます。

- (void)animateImagesAtIndex:(NSNumber *)imageIdx { 
    // Do something here 
    [UIView animateWithDuration:1 animations:^{ 
     // Do swap 
    } 
    completion:^(BOOL finished) { 
     if (finished) { 
      [self animateImagesAtIndex:imageIdx]; 
     } 
    }]; 
} 
0

UIImageViewは、一連の画像のアニメーションをサポートしています。アニメーションのプロパティーはイメージの配列で設定し、メソッドstartAnimatingとstopAnimatingを呼び出すだけです。

関連する問題