SwiftUI: contentOffsetの指定が可能なScrollViewを実装する(2. bounce編)

p0dee
2 min readJun 5, 2020

--

前回の続き。

現状のSwiftUI.ScrollViewではcontentOffsetを指定できないという動機から、ScrollViewの自前実装に挑戦している。前回は、水平スクロールしか許容しないものの、contentOffsetを指定可能できるよう実装できた。

さて、ここまででいくつかの制約を残して単純化した実装を行ったので、今日はbounceの再現実装を試みる。コンテンツの端までスクロールが到達し、それ以上引っ張るとスクロールの変化量が鈍化し、指を離すとコンテンツの端までcontentOffsetが自動的に戻るという挙動だ。

前回に対して、.gesture(…)に以下のような実装を追加して

  1. ドラッグ中に 超過したスクロール量分は、変化量を減らすよう調整する
  2. ドラッグが終了したら、端までcontentOffsetを戻す

ようにした。

これでは、bounce時のアニメーションがないので、offsetの変化に対して

  • ドラッグ中はアニメーションを行わない
  • 非ドラッグ中はアニメーションを行う

よう実装を加えた。

これによって、bounce中にアニメーションが行われるようになった。

--

--

No responses yet