前回の続き。
現状のSwiftUI.ScrollView
ではcontentOffset
を指定できないという動機から、ScrollView
の自前実装に挑戦している。前回は、水平スクロールしか許容しないものの、contentOffset
を指定可能できるよう実装できた。
さて、ここまででいくつかの制約を残して単純化した実装を行ったので、今日はbounceの再現実装を試みる。コンテンツの端までスクロールが到達し、それ以上引っ張るとスクロールの変化量が鈍化し、指を離すとコンテンツの端までcontentOffset
が自動的に戻るという挙動だ。
前回に対して、.gesture(…)
に以下のような実装を追加して
- ドラッグ中に 超過したスクロール量分は、変化量を減らすよう調整する
- ドラッグが終了したら、端まで
contentOffset
を戻す
ようにした。
これでは、bounce時のアニメーションがないので、offset
の変化に対して
- ドラッグ中はアニメーションを行わない
- 非ドラッグ中はアニメーションを行う
よう実装を加えた。
これによって、bounce中にアニメーションが行われるようになった。