2

これはGiltのようなiPhoneアプリで見られます。ユーザーがビューをスクロールすると、scrollViewの残りの部分が下にスライドするときに、サブビューが1つの端に「くっつく」ように見えます。つまり、scrollViewにはテキストボックス(またはその他)があり、scrollViewがビューの上部に当たると、ビューの残りの部分がスライドし続けるので、そこに「固定」されます。

したがって、いくつかの問題があります。まず、「scrollViewDidScroll:」(通常のスクロール中)を介して、対象のビューが通過する(または再表示される)時期を判別できます。ここにはかなりの粒度があります。デリゲート呼び出しの違いは、数百ポイント以上になる可能性があります。そうは言っても、ビューがscrollViewの上部に近づくのを見ると、scrollViewの上部の下に静的に表示されているビューの2番目のコピーをオンにします。私はこれをコーディングしていませんが、実際の「スティック」の外観が欠けているようです。ビューは最初に消えてから再び表示されます。

次に、setContentOffset:animatedを実行すると、デリゲートメッセージは取得されません(Giltはこれを実行しません)。では、この場合、どのようにしてコールバックを取得しますか?「scroll.layer.presentationLayer.bounds」でKVOを使用していますか?

4

2 に答える 2

1

さて、私はこれを行う1つの方法を見つけました。ユーザーがフリックおよびドラッグしてスクロールすると、UIScrollViewはそのデリゲートに「scrollViewDidScroll:」メッセージを表示します。次に、スクローラーがコンテンツをアクションを実行する必要のある場所に移動したかどうかを確認できます。

ビューを「貼り付ける」ときは、scrollViewから削除してから、scrollViewのスーパービュー(原点は0,0)に追加します。剥がすときは、その逆を行ってください。

UIScrollView setContentOffset:animated:を使用すると、注意が必要になります。私が行ったことは、UIScrollViewをサブクラス化し、フラグを使用してオフセットを移動するsetContentOffsetであることを指定してから、高速実行タイマーを開始してcontentOffsetを監視することでした。

計算を処理するメソッドを配置し、子ビューをこのサブクラスに貼り付け/貼り付け解除します。かなり良さそうです。

于 2011-08-01T19:11:24.003 に答える
0

Giltは、これを実現するためにテーブルビューを使用しています。具体的には、テーブルビューのデリゲートでは、次の2つの方法があります。

– tableView:viewForHeaderInSection: および– tableView:heightForHeaderInSection:

于 2013-02-13T00:25:13.863 に答える