1

UIScrollViewController

| ----- UIImageView1、2、3、4、5 .. ..

UIScrollViewControllerはいくつかのサブビューを持っているを持っています。すべてのサブビューにはが含まれていますUIImageview。スクロールするUIImageViewと、現在のページの両側のページが次のように読み込まれます。

imageView = [[UIImageView alloc] initWithContentsOfFile:fileName];

しかし、ローカル画像ファイルが非常に大きくなると(> 2MB)、スクロールが非常に影響力のあるものになり、スタックします。

これを回避する方法はありますか?たとえば、キャッシュを使用しますか、それとも非同期で実行しますか?

4

1 に答える 1

5

画像を非同期で、別のスレッドで読み込むことができます。または、4より後のiOSのみをサポートしている場合は、ブロックを使用して簡単に実行できます。

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, NULL), ^{
    UIImageView* imageView = [[[UIImageView alloc] initWithContentsOfFile:fileName]autorelease];       
    dispatch_async(dispatch_get_main_queue(), ^{
        //Maybe correct the frame too
        [self.view addSubview:imageView];
    });
});

ブロックを使用できない場合は、別のスレッドで実行できますが、少し複雑になります。

とにかく、私はお勧めします:

  • スクロールビューに追加されたUIImageViewを「ダミー」または「スピナー」で作成し、ユーザーの操作が停止したときに(デリゲートメソッドで検出)、表示されているイメージビューをリロードできます。

  • ユーザーがスクロールしているときは、必要な画像のUIImageオブジェクトをロードしてキャッシュすることをお勧めします(たとえば、配列や辞書に保存します)。

  • ScrollView内のUIImageViewフレームに合うようにUIImageコンテンツをスケーリングします。そうすれば、レンダリング時にUIImageは提供された画像を「自動スケーリング」しないため、より高速になります。

于 2012-06-04T10:11:38.813 に答える