Closed ooyamatakehisa closed 1 year ago
[Memo] 自動スクロールの制御について
wasScrollAtBottomの効果 LazyStackの特性によってwasScrollAtBottom == trueではユーザーが画面の一番下をみていたことを確認できる これによってwasScrollAtBottom == false、すなわち一番下以外のの書き起こしを閲覧中の場合の自動スクロールを抑制できる
isScrollAtBottomの効果 自動スクロール自体はwasScrollAtBottomだけでも動くが、それだけではユーザーが一番下にいるときに常に自動スクロールが起きてしまい、ユーザーが上にスクロールしようとしたときなどにその動作と干渉してしまう。isScrollAtBottomによって新たな書き起こしが追加されたタイミングを検知して、その時のみ自動スクロールを有効化することで上記の問題を避ける。 isScrollAtBottomは新規のTranscriptionLineが追加されたときにFalseになるので wasScrollAtBottom==true && isScrollAtBottom==falseはユーザーが一番下にいて、なおかつ新規のTranscriptionLineが追加された状況を表す 下にまだスクロールするべきコンテンツが有ることを示すグラデーション影を表示する条件にも使う。つまり一番下にいないならグラデーションを表示する。
Related Issue
What
https://user-images.githubusercontent.com/44559556/235603516-157c3fc9-8b32-44b0-ae67-fa11dcd4a8b8.MP4
Memo
.onAppear
等を使って、スクロールが一番上・下にあるかどうかの判定をしている。