【Swift UI】ScrollViewのスクロール量や位置を取得する方法

この記事からわかること
- Swift UIでScrollViewのスクロール量や位置を取得する方法
\ アプリをリリースしました /

Swift UIでScrollViewのスクロール量や位置を取得する方法
Swift UIでScrollViewのスクロール量や位置を取得するには以下のように実装します。
ポイント
- Preference ・・・スクロール量をクラスのプロパティまで渡す
- GeometryReader・・・スクロール量を取得する
ポイントとなるのは上記の2つです。GeometryReader
でスクロール量を取得するためにbackground
の中でColor.clear
を実装してそこからpreference
メソッドで値を渡しています。Color.clear
オブジェクトが背景色としてスクロールビューと同じ大きさに広がってくれているのでそのminY
を取得しています。
しかしこれではスクロールするとスクロールの途中で0を通過する実装になってしまいます。これを避けるために初期値のminY
を保持しておき、出力する際に減算することでスクロール量を表現しています。負の数が気になる場合はabs
で絶対値を取得すればOKです。
実装失敗例
私は最初以下のように実装しました。これでいけるかと思いましたがScrollView
とGeometryReader
の相性が悪く、スクロールビューなのにスクロールできなくなってしまいました。
ScrollView
とGeometryReader
を使用する際にスクロール機能を活かすためにはGeometryReader
側が親になるように配置しないといけないようですが、これではスクロール量を取得することができませんでした。
まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。
ご覧いただきありがとうございました。