間違ってたらすいません
UICollectionViewCompositionalLayoutってそもそも「縦スクロール内に横スクロール」は可能だけど、「横スクロール内に縦スクロール」みたいな構成はできないんですね。
できないんですよね?
たぶんできない。
それで、UICollectionViewCompositionalLayoutを適用したUICollectionViewのdelegateを設定してUIScrollViewDelegateを取ろうとすると、縦は取れるけど横が取れない。
まあ何となく取れない気がしますよね。
問題なのは横スクロールのUICollectionViewを作りたかった場合で、UICollectionViewCompositionalLayoutを使いたい場合。
そもそもそんなシーンどれだけある?と思いますが結構あります。
1つはpagingをしたい場合です。
UICollectionViewのpagingはマジで複雑だし微調整で数日掛かります。できればUICollectionViewCompositionalLayoutでpagingしてしまいたい。
しかしそうすると「いま何ページ目か」とか「スクロールが終わったら」を取れない。
それでどうすれば良いのか調べていたら
let layoutSection = NSCollectionLayoutSection(group: layoutGroup)
layoutSection.visibleItemsInvalidationHandler = { (visibleItems, point, env) in
print("-------------------------")
visibleItems.forEach { item in
print("item: ", item.indexPath.item, point)
}
}
こうやるらしいです。
visibleItems, point, env、なんか知らないclassやらprotocolがたくさん出てきて嫌な感じですが、とりあえず上記のようにするとスクロールする毎に「現在表示されているcellのindexPath」とかそのポジションが取れるので、割といいんじゃないかと思いました。
またなんかあったら追記します。
もっとちゃんと分かりやすい記事
↓
https://qiita.com/hcrane/items/92c0e08f9bf7d017f53f
追記:
いや、スクロールの終了が取れないですね。
cellのイベントは取れますが、スクロールのイベントがさっぱり取れません。
というわけでゴリ押しで内部のscrollViewのdelegateを奪ったところ、レイアウトが壊れました。
どうやらscrollViewのdelegateは既に使用されているようでした。
詰みました。
追記:
諦めました。非公開クラス使いたくないし。