0

私はiOSアプリを作成しています。このアプリでは、メモリが問題にならない場合、画面に何千もの画像が同時に読み込まれます。明らかに、これは良いアプローチではないので、私がやりたいのは、これらの画像の一部を「レンダリング解除」して、任意の時点で画面に表示されるのはごくわずかになるようにし、ユーザーが特定のアクションを実行したときにそれらを「レンダリング」することです。だから私の質問は、どうすればこれを行うことができますか?

または、もっと簡単な場合は、すべての画像が同じです。これはちょっと奇妙に聞こえるかもしれませんが、はい、私のアプリでは、画面に何千もの同じ画像をロードする必要があります。これが事実なので、それらはすべて同じファイルを参照するので、メモリ管理は実際には問題ではありませんか?(問題ではないということは、hiddenプロパティを使用して画面に表示されているものと表示されていないものを変更できることを意味します)。私がこれを行うことができれば、私はやっていた

UIImage *image = [[UIImage alloc] initWithContentsOfFile:@"image.png"];
UIImageView *imageView = [[UIImageView alloc] initWithImage:image];
[scrollView addSubview:imageView];

(scrollViewは、UIScrollViewズーム機能をピンチするために使用していたものUIImageViewです)。ただし、問題は、これを実行しても、UIImageViewまったくレンダリングされないことです。

他のアイデアや提案はもちろんありがたいです、そして事前に感謝します:D

4

1 に答える 1

1

答えは、UI によって異なります。数千の画像とは、一度に表示される画像の数です。一度に数枚しか見られない巨大なフォト ギャラリーのようなものですか?その場合、おそらくその時点で表示されている画像のみのビューを維持するだけで、表示されている画面からスクロールされたものには、スクロールするまでビューが関連付けられません (表示されていたものは表示されていましたが、スクロールされて解放されます)。

しかし、別の問題に対処している場合、大量の小さな画像が同時に表示される場合、それは別の問題です ( qegal によって提供されるようなリンクで対処されます)。

後者のようなことをしようとしていると思いますが、とにかく、画像の性質と、ここで扱っているユーザーエクスペリエンスの種類について、もう少し良いアイデアを提供する必要があります.

アップデート:

あなたは前者のようなことをしているように聞こえます。その場合...

PhotoScrollerをチェックしてください。これは、大量の画像コレクションを介した Apple のナビゲーションの例です (アプリには 3 つの画像しかありませんが、そのアイデアは理解できます)。

個人的には、大量の画像コレクション (約 100 ですが、簡単にそれ以上の数になる可能性があります) を水平方向にパンするフォト ブラウザー (UIPanGestureRecognizer) を使用するローテク実装があります。ただし、私のView Controllerには3つのUIImageViewコントロールしかありません。1つは表示されているメイン画像用、1つは前の画像用(そしてそのフレームは画面の左側に設定されています)、もう1つは次の画像用です(そしてそのフレームは画面のすぐ右側に設定されています)。UIPanGestureRecognizer から継続的にフィードバックを受け取ると、ジェスチャ認識エンジンの translationInView の水平部分によって 3 つのフレームすべてを調整します (スクロールビューを使用して画像の動きを調整する他の実装を見てきましたが、アイデアは依然として同じ)。手放したら、ジェスチャ認識エンジンは、次または前の画像へのスワイプに成功したかどうかを判断し、そのアニメーションを完了します。完了すると、3 つの UIImageViews (前のオフスクリーンを左、現在のオンスクリーン、次のオフスクリーンを右) を再配置し、リロードします。適切な「現在」、「前」、および「次」の画像を含む 3 つの画像ビュー。その時点で、ジェスチャ レコグナイザーでもう一度スワイプする準備が整います。

于 2012-06-27T02:38:07.520 に答える