ページの高さが異なる複数のページを処理できるカスタムの垂直 UIScrollView を作成しようとしています。
仮定:
- ページの高さが画面の高さ以上
- ページが画面の高さよりも高い場合は、通常の UIScrollView としてスクロールします – 上下にバウンスします
- ユーザーがスクロールを終了し、「改ページ」が画面の中央にある場合
- 速度がない場合 - ページは最も近いページにスナップします
- 速度がある場合 - ページはスワイプの方向に 1 つに変わります
これを達成するために多くのアプローチを試みましたが、多くの UIScrollView の癖に出くわし、それが困難になりました。
問題:
- UIPanGestureRecognizer には、速度を取得するための信頼できない方法があります (velocityInView:)
- scrollViewWillEndDragging:withVelocity:targetContentOffset: メソッドは、コンテンツ オフセットを設定してアニメーション化しようとする私の試みを恣意的に破壊する可能性があるため、頭痛の種になります。
- 中間ページの 1 つでバウンスを達成する方法がわかりません。スクロール処理全体を書き直さなければならないのではないかと心配しています。
- UIScrollViewが減速しているときにコンテンツオフセットの設定をオーバーライドしようとすると、得られるのは
- 私のコンテンツオフセットが設定されています
- 設定したコンテンツ オフセットを超えて減速が続く
ボーナス
UIScrollView をページとして UIScrollView 内に配置することも試みましたが、このアプローチも首の痛みでした。たとえば、内側のスクロールの一番下にいたとき、少し下にスクロールして指を離し、すぐにもう一度つかんで上にスクロールすると、外側のスクロールがタッチを受け、内側のスクロールのプレゼンテーションが台無しになりました。
誰かがこれを行う方法を知っていますか? 私は完全に立ち往生しているので、どんなヒントも役に立ちます...