2016-10-08 7 views
0

画像を最初に読み込んでメインキューのUIImageViewの画像を更新するバックグラウンドキューを開始しました。URLから画像を読み込んでも、まだ十分に高速ではありません。

 int i = 0; 
     for (UIImageView *imageView in self.featuredPhotoImageViewCollection) { 
      dispatch_async(dispatch_queue_create("imageQueue", NULL), ^{ 
       NSURL *url = [NSURL URLWithString:[featuredPhotos[i] valueForKey:@"url"]]; 
       UIImage *image = [UIImage animatedImageWithAnimatedGIFURL:url]; 
       dispatch_async(dispatch_get_main_queue(), ^{ 
        imageView.image = image; 
       }); 
      }); 
      i++; 
     } 

しかし、それでもまだ十分速いわけではありません。 0.5〜1秒の遅延があります。バックグラウンドキューを使用する以外の方法はありますか?

答えて

1

Uはバックグラウンドキューの使用を誤解しています。あなたのコードでは、iOSはバックグラウンドコードの実行を開始し、メインキューはバックグラウンドコードを終了してメインキューの画像ビューを更新するまで何もしません。

したがって、どのキューをバックグラウンドで使用しても、スピードは加速しません。

それの通常の使用が 1である)のローディングインジケータを示し、 2)バックグラウンドキュー{何か 3)メインキュー{非表示のロードインジケータ&更新UI}}

あなたのケースでは、私の提案は、あなたのGIFイメージのスナップショットを上記のようなインジケータとして表示します。または、単にインジケーターを表示することもできます。

または、すべてのGIF画像をあらかじめロードしておき、ここに表示してください。複数の画像を読み込むには、常に時間がかかります。

0

SDWebImageのようなサードパーティライブラリを使用してキャッシュを使用することができるため、問題を最初にダウンロードするだけに減らすことができます。また、優先度のオプションもあり便利です。

または、表示されているビューに到着する前にイメージをダウンロードできます。

0

gifが大きなファイルで、サーバーがマルチスレッドダウンロードをサポートしている場合は、ディスパッチグループを使用してgifをダウンロードできます。

関連する問題