2

私は、youtube apiを使用してビデオサムネイルを取得し、ギャラリーに表示するipad用のアプリを作成しています(ipadのネイティブyoutubeアプリのように)。基本的には、UIScrollView上のUIImageViewの集まりです。ここで問題となるのは、すべての画像を一度に表示すると、メモリの問題によりアプリがクラッシュする可能性があるため、見ることができる画像のみを保持し、他の画像をファイルに書き戻すという考え方です。

私の問題は、UIScrollViewのコンテンツの正確な「表示」領域の境界を取得する方法です。

何か案は?

4

5 に答える 5

2

AQGridViewをご覧になりましたか? まさにこの種のもののために設計されています。

于 2010-09-29T19:49:49.767 に答える
2

WWDC 2010 セッション 104 - スクロール ビューを使用したアプリの設計をご覧ください。

于 2010-09-28T14:08:24.207 に答える
1

UIScrollViewがスクロールしたら、コンテンツオフセット(scrollView.contentOffset)を確認し、(たとえば)x値を取得する必要があります。これにより(そしてuiscrollviewの幅フレーム値に応じて)、ユーザーが何を使用しているかを知ることができるはずです。NSLogを使用してこれらの情報を印刷してみてください;-)

そして、ユーザーがどの「ページ」を表示しているかがわかったら、UIImageViewをロードできます。

幸運を :-)

于 2010-09-13T21:39:45.753 に答える
1

で、layoutSubviews次のように現在表示されている境界を取得できます。

CGRect visibleBounds = [self bounds];

次に、そのフレームをvisibleBoundsと比較することにより、UIView(UIImageViewなど)が表示されているかどうかを確認できます。

BOOL visible = CGRectIntersectsRect(visibleBounds,cellFrame);

表示されている各ビューを確認し、表示されている境界の外側にあるビューを削除するだけです。次に、データセットをチェックして、表示されているがまだ表示されていない画像を探します。

また、常に新しいUIViewを作成するのではなく、UIViewを再利用する必要があります。NSSetで削除されたものをキューに入れ、新しいセットを作成する前にそのセットを確認するだけです。

于 2010-09-28T15:54:14.300 に答える
1

別のアプローチを次に示します。

UITableView を使用しますが、通常のスクロール ビューのように見えるようにプロパティを調整します。(基本的に、各行にいくつかのサムネイルを含め、行区切りを削除します。)

行が画面の外に移動すると、ビューがリサイクルされ、UIImageViews によって使用されたメモリが再利用されます。

これには、ユーザーがどのサムネイルを押したかを正確に知るための追加作業が必要ですが、それほど難しくありません。過去にこれを行い、tag プロパティを使用して配列インデックスを格納しました。理想的ではありませんが、十分に単純なハックです。

これは、テーブルが垂直方向にのみスクロールする場合にのみ機能することに注意してください。私の知る限り、水平方向にスクロールする UITableView を使用することはできません。

于 2010-09-28T23:15:06.997 に答える