0

私のアプリケーションでは、スクロールビューがあります。大きなサブビューがたくさんあり、サブビューはスクロールに基づいて動的に追加されます。スクロール時にサブビュー(imageviews)を動的に追加しようとします。ユーザーがスクロールすると、サーバーからpageSizeなどに基づいて非同期でさらに画像をフェッチしようとします。これらの画像は、対応するimageviewに配置されます。

私はAppleのWWDCSessoion104も試しましたが、これはオフライン画像に適しているようです。

また、スクロールビューの画像のサイズを一定の比率で変更しようとしています。これは問題ないと思います。問題は、スクロールビューで画像の数が増えると、アプリケーションのメモリが不足することです。CATiledLayerを使用する代わりに、画像ビューで画像を直接使用したことが原因である必要があります。しかし、CATiledLayerを使用してscrollviewに非同期画像を表示するためのヘルプを探しています。

どうもありがとう、

リノジョーンズ

4

2 に答える 2

0

コメントに基づいて回答を完全に編集します。

コントローラーをscrollViewDidScrollよりもscrollviewのデリゲートとして設定する必要があります:(またはscrollViewDidEndDecelerating:チェックの頻度を減らしたい場合)メソッドでは、一部の画像がコンテンツビューの表示部分の外にあるかどうかを確認してから、リリースします(つまり、ポインタをnilに設定して、メモリを節約します。

便宜上、コンテンツの表示部分を取得する方法の例を次に示します。

CGRect visibleRect;
visibleRect.origin = scrollView.contentOffset;
visibleRect.size = scrollView.bounds.size;

このrectの完全に外側にあるものはすべて解放する必要があります(もちろん、ユーザーがスクロールする場合は、それらをリロードする必要があります。常にロード/アンロードするのは難しいかもしれません...)

于 2013-01-23T21:13:24.083 に答える
0

簡単に言うと、これですべてです。すでに画像を非同期でダウンロードしてデバイスにキャッシュしてから、現在のタイルクラスにUIImage(imageObject)プロパティを追加しました。このプロパティは、ダウンロードされて実装された画像オブジェクトを保持します。次のと私のためのトリックをしました。信じられないかもしれませんが、imageviewの読み込みとCATiledLayerの比較-CATiledLayerは100倍高速で効率的です。

+ layerClass
{
    return [CATiledLayer class];
}

- (void)drawRect:(CGRect)rect
{
    [imgObject drawAtPoint:CGPointMake(0,0)];
}

それが将来誰か他の人に役立つことを願っています。私がもっと助けになることができるかどうか私に知らせてください。

于 2013-01-25T13:25:11.507 に答える