2012-01-06 14 views
0

私は現在、GridViewクラスを持っています。それはグリッドのような方法で配置されたサブビューの束を持つステージング領域を持つUIViewのサブクラスです。 GridViewの各セルは、drawRectを呼び出すカスタムUIViewサブクラスです。遅い読み込みスクロールでカスタムUIViewが遅すぎる

私は、UITableViewパターンに従ってレイジーローディングを実装しました。私は、表示されていたグリッドセル(+/- 2つのセルを各側にロード)のみをロードして追加しました。ビューがスクロールされると、NSMutableSetには見えなくなったセルがキャッシュされ、現在表示されているセルをビルドするためにそのセットのセルも再利用されます。そのことについては、メモリリークを起こさずにテストし、プロファイリングしたので、うまく動作しているようです。

問題は、スクロールが遅すぎる/ぎこちないことです。ユーザーがスクロールする速度が速ければ速いほど、ジャーキーです。場合によっては、非常に高速にスクロールすると、メモリー警告がスローされます。いくつかのデバッグ作業の後、私は凍結して動き始めたときに、グリッドビューのサブビューが削除されないようにしました。

iPad 1とiPad 2のスクロールが大幅に遅い

私の質問は、誰もこれをどう対処するかについてのアイデアはありますか?スクロールの不安定さを止めるためのあらゆるトリックや最適化?私はこれを2日間把握しようとしていたので、この時点で何か助けになるでしょう。事前のおかげでは

答えて

0

可能な減速が原因:1)2)ユーザの間cacheing有効アクティブインタフェース

選択肢a)に予圧をのdrawRect、次いで本滑らかなインターフェース、またはb)平滑スクロールしながらバックグラウンドでロードするもの、空白領域どこに負荷がかかっていますか?

デバッグ:プロセス中にNSLogを実行しようとしましたか?たとえば、各キャッシュ呼び出しで、不要な作業が多いかどうかを確認していますか?

+0

お返事ありがとうございます。 drawRectは、四角形を描き、背景を塗りつぶしています。場合によっては、別の関数(drawRectではなく)で別のカスタムUIView(独自のdrawRectを呼び出します)を作成し、それをサブビューとして追加します。これは問題だと思っていましたが、それをプロファイリングした後、drawRectはあまりにも多くの時間を要しませんでした。 選択肢a)については、巨大なグリッドを持つことができます(例:1000 x 5)。これらのセルをすべてロードすると10秒以上かかることがあります。 選択肢b)をもう少し説明できますか?私は理解していません。 – baselq

+0

これらの1000個のオブジェクトに必要なスペースがわかっている場合は、各オブジェクトのコンテンツの実際の読み込みが画面上に表示されていることに応じて、各オブジェクトとそのプレースホルダーgfxを初期化することができます。一例がalekseynによるeasytableviewの可能性があります。それは知覚可能なグリッチのない少なくとも何百もの画像を扱うようだ。同じロジックがイメージの代わりにカスタムビューに適用されるはずです。 – karmington

関連する問題