SwiftUI.ScrollView
は、UIScrollView
のようにcontentOffset
が指定できない。
またScrollView
にはisPagingEnabled
の指定もできないので、ページング処理もできないので困ってしまった。
そこで、ScrollView
のoffset
指定について調べてみたのだが、、Stack Overflowなど、以下のようなScrollView.content.offset(…)
を用いる方法が複数箇所で紹介されていた。
しかしここでのScrollView{…}.content
とは、ScrollView<Content>
のvar content: Content
を抜き出すものなので、結果的にScrollView
がまったく使われず、意味がないと思っている。
制約多き現状のSwiftUIでは、ScrollView
に頼らず、愚直にoffset
を指定するしかないのか、、
というわけで、自前で似非ScrollViewを実装し、contentOffset
を指定可能にしてみた。
使い方は、次のようにoffsetを決定するBinding<CGFloat>
を初期化時に渡すようにした。
今回は実装を単純化するためにかなり制約を設けたので、実用にはまだまだ遠い。
- スクロール方向は水平のみ
- コンテンツが端に到達した際のbounce処理を省略
- contentOffset変更時のアニメーションは無効(アニメーションの有無指定をどのように実現するべきか考え中)
- indicatorの表示を省略
- ページング処理を省略