1

私のアプリでは、300枚の画像(400 kB)を表示するスクロールビューを使用しています。2分近くかかるため、上下にスクロールするとスムーズになりません。

どうすればこの問題を解決できますか?

注: scrollviewの最後までスクロールすると、スムーズになることに気づきました。スクロールの問題は初めて発生します。

4

3 に答える 3

0

すべての画像を事前に読み込まないでください。画像を読み込んで、現時点と次の+最後の画像を表示します。

私が理解している限り、スクロールビューがロード/表示されるときにすべての画像がロードされます。画像がたくさんあるので、3つの画像をロード/メモリに保存するだけで、はるかに高速になり、メモリを大幅に節約できます。これは、前/左に表示されて表示されていない画像になります-現在表示されて表示されている画像と、表示されていない次/右の画像です。

したがって、左に移動/スワイプすると、基本的にスクロールビューが左に移動し、すでに読み込まれている右側の画像が表示されます。バックグラウンドで、左端の画像の割り当てを解除しながら、次の右の画像を読み込みます。

常に、最大4つの画像が読み込まれます。

WWDC 2011の無限スクロールビューの例を見てください-優れた視覚的な例とサンプルコードについては、セッション104の高度なスクロールビューです。

于 2012-04-17T08:59:18.657 に答える
0

これで問題は解決すると思います。この質問はあなたにいくつかの文脈を与えるかもしれません:

uitableviewcellのようにカスタム要素を再利用/リサイクルする方法は?

于 2012-04-17T09:16:25.000 に答える
0

これをロード関数(画像をロードする場所)に追加してみてください。whileループまたはforループを使用して画像を読み込む場合は、このコードをループに追加します。

NSURL *url=//here url for your image   
dispatch_queue_t currentQueue = dispatch_get_current_queue();
dispatch_queue_t dataConvertorQueue = dispatch_queue_create("Fetching images", NULL);
dispatch_async(dataConvertorQueue, ^{
    NSData *data = [NSData dataWithContentsOfURL:url];
    dispatch_async(currentQueue, ^{
       //replace imageView with your imageView outlet
       imageView.image = [[UIImage alloc] initWithData:data]];
    });
});
dispatch_release(dataConvertorQueue);

このコードは、URLから画像を取得して表示するのに役立ち、テーブルビューでうまく機能します。それはあなたが望むものとは正確に一致しないかもしれませんが、それはあなたにそれを行う方法についてのアイデアを与えるでしょう。お役に立てば幸いです。

于 2012-04-17T09:49:52.563 に答える