【Objective-C】UIScrollViewのデリゲート、スクロール開始・中・停止、ズーム開始・中・停止まとめ【iOS11】

2020年8月27日

UIScrollViewはデリゲートメソッドが多く、どれを使えばいいのか迷いがちなので、デリゲートメソッドを「ドラッグによるスクロール」「ズーム」「その他」の3種類に分類し、それぞれのライフサイクルについてもまとめました。

もくじ

  1. スクロールした時に呼ばれるデリゲートメソッド
  2. ズームした時に呼ばれるデリゲートメソッド
  3. その他のデリゲートメソッド

1.タップ(ドラッグ)してスクロールをした時に呼ばれるデリゲートメソッド

スクロール時のデリゲートメソッドのライフサイクル

  1. - (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
    タップしスクロール開始
  2. - (void)scrollViewDidScroll:(UIScrollView *)scrollView
    スクロール中(画面に指が触れている状態)
  3. - (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset
    タップ終了開始時
  4. - (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
    タップ終了時
  5. - (void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView
    慣性によるスクロール開始時
  6. - (void)scrollViewDidScroll:(UIScrollView *)scrollView
    スクロール中(画面から指が離れ、慣性によるスクロールになっている状態)
  7. - (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.ズームした時に呼ばれるデリゲートメソッド

ズーム時のデリゲートメソッドのライフサイクル

  1. - (void)scrollViewWillBeginZooming:(UIScrollView *)scrollView withView:(UIView *)view
    ズーム開始
  2. - (void)scrollViewDidZoom:(UIScrollView *)scrollView
    ズーム中
  3. - (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");
}