2009-05-07 5 views
2

まあ、呼び出されますデリゲートがあります:スクロールビューが減速停止 UIScrollViewのスクロール中にビューのリサイクルをどのように実装しますか?

  • スクロールの動きを初期化した後、スクロールビューからの
  • 指liftetをスクロール

    • スクロールビューのbeginnsは、

    しかし、問題は、スクロール時にそれらのViewをリサイクルしたい場合、スクロール中に非常に迅速に行う必要があるということです。ユーザーがスクロールすると、上から下、または下から上に1つまたは3つのビューを削除するメソッドが起動する必要があります。

    問題:

    • ユーザーは非常にゆっくりスクロールする、または非常に速いかもしれません。知りません。

    • スクロールが開始されるとすぐに、オフセットが50回/秒であることを確認して、リサイクルの時期であるかどうかを判断する必要があります。次の問題は、メソッドを1秒間に50回呼び出す方法と、そのメソッドをスクロール停止として停止する方法です。

    この問題を解決するためにどのパターンをご存知ですか?私はそこにいくつかの良いものがあると確信しています。

  • 答えて

    2

    テーブルビューはこの種のものには優れており、非常に柔軟です。

    +1

    左から右にスクロールしたり、任意の方向にスクロールしたりする場合はあまり効果がありません。 –

    2

    実際には、指が持ち上げられたときではなく、スクロール中にscrollViewDidScrollメソッドが連続的に呼び出されます。 (実際にはcontentOffsetが変更されるたびに呼び出されますが、これはユーザーのスクロールまたはプログラムによる変更のためです)。したがって、ビューをリサイクルするために安全に使用できます。

    ユーザーは、1つのジェスチャーで1画面幅または高さの距離をスクロールする可能性があるため、必ず1画面サイズの範囲内でビューをプリロードしてください。

    もちろん、ビューを縦に並べると、UITableViewはあなたの友人であり、あなたのためにリサイクルします。 (あなたが興味を持っている場合にも、可変高さの行をサポートしています。)

    +0

    ありがとう!また、ユーザーがすばやくスナップした後、減速が終了するまで、数ページを1回転で上下にスクロールすることもあります。スクロールビューでUIImageViewを完全に制御する必要があるため、私はUITableViewを使用しませんでした。つまり、スクロール中に発生する特殊効果を実装しているためです。 – Thanks

    +0

    あなたは正しいです。私は、おそらくユーザーがワンタッチで1画面分の高さのデータをスクロールして、そのプロセス中にデリゲートが呼び出されないことを意味していました。私はあなたがスクロールの各画面の高さごとにscrollViewDidScrollを少なくとも1回呼び出すことが保証されていると信じています。 (少なくとも、これは合理的な仮定です。)もちろん、これは私たちが話している極端なケースです。 –

    +0

    詳細テーブルビューではできないことを正確に説明できますか?ただ疑問に思う。 –

    2

    ページングが有効になっている場合は、スクロールがに良い時間ですページ境界にあるときに、あなたのデリゲートが

    -(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView

    を受け取りますビューをリサイクルします。そうしないと、あなたはビューをリサイクルすることができたときにデリゲートの

    - (void)scrollViewDidScroll:(UIScrollView *)scrollView;

    にオフセットコンテンツを監視して作業する必要があります。

    +0

    ありがとう!私は - (void)scrollViewDidScrollを使用しました:(UIScrollView *)scrollView;このため。 – Thanks

    関連する問題