iPad用に設計されたIOSアプリケーションがあります。1 つのページで、ユーザーにレポートを表示します。このレポートでは、UIScrollView 内の画面に 5000 個の UILabels をレンダリングする必要があります。これにより、メモリ不足のためにアプリケーションがクラッシュします。UITableView にはオンデマンドでコンテンツをロードする機能があることを知っています。スクロール ビューで特定のコンテンツのみをレンダリングし、スクロールが発生したときに非表示になったコンテンツを削除し、表示する必要があるコンテンツを追加するにはどうすればよいですか?
3 に答える
カスタム行、おそらく複数のラベルで構成される行を含むテーブル ビューを使用するように再構成する方法はありますか? そのモデルは、ロード オン デマンドとリソースの再利用を非常に自然な方法でサポートしています...
おそらく、画面レイアウトをより具体的にすることができますか?
テーブル ビューがそのテーブル セルをリサイクルするのと同じように、ラベルをリサイクル (再利用) する必要があります。これは、「タイリング」サブビューと呼ばれることもあります。タイリングを使用すると、メモリに収まりきらないほど多くを表示できます。
WWDC 2012 セッション 104 を見ることをお勧めします。このセッションのチュートリアルでは、UIScrollView で画像ビューを並べて表示する写真アプリを作成します。写真アプリはアイテムのグリッドではなくコンテンツのページをスクロールしますが、ビデオはあなたのアプリに関連している可能性があると思います.
特定のケースに適用されるチュートリアルの非常に簡単な概要を次に示します。
(1.) ラベルを追跡する iVar を宣言します。
NSMutableSet *recycledLabels;
NSMutableSet *visibleLabels;
(2.) 再利用可能なラベルを取得するメソッドを実装します。
- (UILabel *)dequeueRecycledLabel;
(3.) タイリングを行うメソッドを実装します。
- (void)tileLabels; // this will add/remove labels from the scroll view
(4.) スクロール ビューのデリゲートを設定し、scrollViewDidScroll: デリゲート メソッドで tileLabels を呼び出します。
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
[self tileLabels];
}
WWDC ビデオは詳細を記入するのに役立ちます。これはあなたのケースに当てはまると思います。ただし、特定のケースで機能させるには、多くの即興を行う必要があります。これは簡単ではないかもしれません。しかし、それは実行可能です。
ビデオの最後で、CATileLayer を使用したタイリングについて説明します。正直、その部分は理解できませんでした。しかし、大きな画像を表示していないため、あなたの場合には当てはまらないと思います。