【Swift4】UIScrollViewのデリゲート、スクロール開始・中・停止、ズーム開始・中・停止まとめ【iOS11】
UIScrollViewはデリゲートメソッドが多く、どれを使えばいいのか迷いがちなので、デリゲートメソッドを「ドラッグによるスクロール」「ズーム」「その他」の3種類に分類し、それぞれのライフサイクルについてもまとめました。
もくじ
- スクロールした時に呼ばれるデリゲートメソッド
- ズームした時に呼ばれるデリゲートメソッド
- その他のデリゲートメソッド
1.タップ(ドラッグ)してスクロールをした時に呼ばれるデリゲートメソッド
スクロール時のデリゲートメソッドのライフサイクル
- scrollViewWillBeginDragging(_ scrollView: UIScrollView)
タップしスクロール開始
↓ - scrollViewDidScroll(_ scrollView: UIScrollView)
スクロール中(画面に指が触れている状態)
↓ - scrollViewWillEndDragging(_ scrollView: UIScrollView, withVelocity velocity: CGPoint, targetContentOffset: UnsafeMutablePointer<CGPoint>)
タップ終了開始時
↓ - scrollViewDidEndDragging(_ scrollView: UIScrollView, willDecelerate decelerate: Bool)
タップ終了時
↓ - scrollViewWillBeginDecelerating(_ scrollView: UIScrollView)
慣性によるスクロール開始時
↓ - scrollViewDidScroll(_ scrollView: UIScrollView)
スクロール中(画面から指が離れ、慣性によるスクロールになっている状態)
↓ - scrollViewDidEndDecelerating(_ scrollView: UIScrollView)
慣性によるスクロール停止時(完全停止)
スクロール時のデリゲートメソッド
// 指が画面に触れ、スクロールが開始した瞬間に呼ばれる
func scrollViewWillBeginDragging(_ scrollView: UIScrollView) {
print("scrollViewWillBeginDragging")
}
// スクロール中に呼ばれる
func scrollViewDidScroll(_ scrollView: UIScrollView) {
print("scrollViewDidScroll")
}
// 指が画面から離れた瞬間に呼ばれる
func scrollViewWillEndDragging(_ scrollView: UIScrollView, withVelocity velocity: CGPoint, targetContentOffset: UnsafeMutablePointer<CGPoint>) {
print("scrollViewWillEndDragging withVelocity velocity targetContentOffset")
}
// 指が画面から離れた瞬間に呼ばれる
func scrollViewDidEndDragging(_ scrollView: UIScrollView, willDecelerate decelerate: Bool) {
print("scrollViewWillBeginDragging willDecelerate decelerate")
}
// 指が画面から離れ、慣性のスクロールになる瞬間に呼ばれる
func scrollViewWillBeginDecelerating(_ scrollView: UIScrollView) {
print("scrollViewWillBeginDragging")
}
// 指が画面から離れ、慣性のスクロールが完全に止まる瞬間に呼ばれる
func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
print("scrollViewWillBeginDragging")
}
2.ズームした時に呼ばれるデリゲートメソッド
ズーム時のデリゲートメソッドのライフサイクル
- scrollViewWillBeginZooming(_ scrollView: UIScrollView, with view: UIView?)
ズーム開始
↓ - scrollViewDidZoom(_ scrollView: UIScrollView)
ズーム中
↓ - scrollViewDidEndZooming(_ scrollView: UIScrollView, with view: UIView?, atScale scale: CGFloat)
ズーム終了時
ズーム時のデリゲートメソッド
// ズーム開始時
func scrollViewWillBeginZooming(_ scrollView: UIScrollView, with view: UIView?) {
print("scrollViewWillBeginZooming with view")
}
// ズーム中
func scrollViewDidZoom(_ scrollView: UIScrollView) {
print("scrollViewDidZoom")
}
// ズーム終了時
func scrollViewDidEndZooming(_ scrollView: UIScrollView, with view: UIView?, atScale scale: CGFloat) {
print("scrollViewDidEndZooming, with view atScale scale")
}
3.その他のデリゲートメソッド
// ステータスバーをタップして、スクロールがトップにいった後に呼ばれる
func scrollViewDidScrollToTop(_ scrollView: UIScrollView) {
print("scrollViewDidScrollToTop")
}
// scrollView.setZoomScale(scale: CGFloat, animated: Bool)を使用してスクロールし終わった後に呼ばれる
func scrollViewDidEndScrollingAnimation(_ scrollView: UIScrollView) {
print("scrollViewDidEndScrollingAnimation")
}