Edited at

UITableViewでスクロールをAppスイッチャー風に止める

More than 3 years have passed since last update.

UITableViewのスクロールをiOSのApp切り替え画面みたいな感じで、慣性に違和感を感じさせずに好きな位置で止めるやり方。


MyTableViewController.swift

class MyTableViewController: UITableViewController {

override func scrollViewWillEndDragging(scrollView: UIScrollView, withVelocity velocity: CGPoint, targetContentOffset: UnsafeMutablePointer<CGPoint>) {
let y = //targetConttentOffset.memory.y とか scrollView.frame.height とかをゴニョゴニョしてお好みの位置に
targetContentOffset.memory.y = y
}
}

これだけ。targetContentOffsetが指している値が、このまま行くと止まるはずの場所。

この値を書き換えてあげれば、慣性に違和感を感じさせずにスクロールしてくれる。

scrollViewWillEndDraggingは、ユーザが指を離したタイミングで必ず呼ばれるっぽい。

なので、scrollViewDidEndDeceleratingとか、scrollViewDidEndDragging:willDecelerateとかでゴニョゴニョする必要はない。

参考にしたstackoverflow

リファレンス