2011-07-30 25 views
1

私はカスタムUITableViewCellsを持つUITableViewを持っています。各セルは非同期に画像をロードして表示しますが、これはすべて正常に動作し、テーブルビューは完全にスクロールします。セル内のUITableViewのアニメーションによってスムーズなスクロールが破られます

これで、セルイメージに「フェードイン」アニメーションが追加されましたが、これによってテーブルのスクロールが中断されます( )。私がフリックすると、イメージが "フェードイン"したいとすぐに、テーブルビューのスクロールアニメーションが停止します。まるで新しく導入されたセルイメージの「フェードイン」がスクロールアニメーションを中断したかのようになります。

これを回避する手段はありますか?この共通の行動ですか、または私は本当に変わったことをすることができましたか?

画像が非同期に読み込まれると呼び出されるコールバック関数です(アニメーション関数)。

-(void)imageReady:(UIImage *)image FromUrl:(NSString *)url 
{ 
    [UIView animateWithDuration:0.3 animations:^ 
    { 
     [self.imageThumbnail setImage:image]; 
     self.imageThumbnail.alpha = 1; 
    }]; 

} 

アルファを初期段階で0に設定しました。

すべてのお役に立ちました。

答えて

5

私の場合、必要なのはanimateWithDuration呼び出しで "UIViewAnimationOptionAllowUserInteraction"オプションだけでした。

[UIView animateWithDuration:0.3 delay:0.0 options:(UIViewAnimationOptionCurveLinear | UIViewAnimationOptionAllowUserInteraction) animations:^ 
     { 
      self.imageThumbnail.alpha = 1; 
     } completion:nil]; 
+0

うわー、これは私を永遠に把握していたでしょう。このオプションは、iOS 4ではデフォルトでは無効になっていますが、iOS 5ではデフォルトで有効になっているようです。 –

1

UITableViewUIScrollViewから下降しているので、私はUIScrollViewDelegate方法、-scrollViewDidScroll:-scrollViewDidEndDecelerating:を実装します。さらに、クラスにBOOLを追加すると、shouldPerformAnimationsのようになります。

shouldPerformAnimationsNOに設定します。代わりにYES-scrollViewDidEndDecelerating:に設定してください。

imageReady:fromURL:でアニメーションを実行する前に、shouldPerformAnimationsをチェックするだけです。セルがスクロールしている場合、ユーザーが見ることのないアニメーションを実行することは無意味です。したがって、これを行うことで、テーブルビューがスクロールを停止するまで待ってから、表示されているすべてのセルに対してアニメーションを実行します。 UITableView-indexPathForVisibleRowsメソッドを使用して、可視セルのインデックスパスの配列を取得できます。

関連する問題