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