UITableView や UICollectionView のスクロールが止まった時に処理させたい場合、
毎回毎回「UITableView 止まったとき」みたいに調べてたので、備忘録として…w
前提条件
・Xcode11.6
・Swift5
やりたいこと
・慣性の有無に関わらず、どちらで止まった際も処理は行わせたい
・重複して処理することがないようにする
って感じです。
UIScrollView の Delegate は地味に多くて、細かい挙動までは忘れてしまいます。
実装
エクステンションで追加できるよう、コードを記載します。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
extension ViewController: UIScrollViewDelegate { func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) { // 画面から指が離れた&自動でスクロールが停止した時の処理を記載 } func scrollViewDidEndDragging(_ scrollView: UIScrollView, willDecelerate decelerate: Bool) { guard !decelerate else { return } // 画面から指が離れた&スクロールが止まっている時の処理を記載 } } |
scrollViewDidEndDecelerating はスクロールが自動で止まったときに走ります。
scrollViewDidEndDragging はドラッグの開始と終了の両方で呼ばれます。
decelerate == true → ドラッグ開始
decelerate == false → ドラッグ終了
簡単に言うと、スクロールが停止したのが「自動」か「手動」かの違いです。
この2つのメソッドにスクロール停止時の処理を記載したら、必ずどちらかが動きます。
違うよ!とかこういう方法あるよ!ってのがあれば教えてください。
では( ¯·ω·¯ )
コメント