0%

UIScrollView代理的调用时机

  • func scrollViewDidScroll(_ scrollView: UIScrollView)
    scrollView 滚动时调用,在滚动过程中会多次调用

  • func scrollViewWillBeginDragging(_ scrollView: UIScrollView)
    将要开始拖拽时调用

  • func scrollViewWillEndDragging(_ scrollView: UIScrollView, withVelocity velocity: CGPoint, targetContentOffset: UnsafeMutablePointer<CGPoint>)
    将要停止拖拽时 velocity:加速度 向左滑动 x 为负值,否则为正值 向上滚动为 y 为负值否则为正值;targetContentOffset:滚动停止时的 ContentOffset

  • func scrollViewDidEndDragging(_ scrollView: UIScrollView, willDecelerate decelerate: Bool)
    停止拖拽时调用, willDecelerate:停止拖拽时是否要减速,若值为 false 表示已经停止减速,也就意味着滚动已停止,此时不会调用 scrollViewWillBeginDecelerating 和 scrollViewDidEndDecelerating;若值为 true,则代表 scrollView 正在减速滚动

  • func scrollViewWillBeginDecelerating(_ scrollView: UIScrollView)
    开始减速的时候调用(也就是松开手指时),在拖拽滚动的时候,如果松手时已经停止滚动则不会调用

  • func scrollViewDidEndDecelerating(_ scrollView: UIScrollView)
    停止减速的时候调用(也就是停止滚动的时候调用),在拖拽滚动的时候,如果松手时已经停止滚动则不会调用

  • func scrollViewDidEndScrollingAnimation(_ scrollView: UIScrollView)
    当调用 setContentOffset(_ contentOffset: CGPoint, animated: Bool)/scrollRectToVisible(_ rect: CGRect, animated: Bool)API 并且 animated 参数为 true 时,会在 scrollView 滚动结束时调用。若是 UITableView 或者 UICollectionView,调用 scrollToRow 也和上面一样

  • func viewForZooming(in scrollView: UIScrollView) -> UIView?
    放回要缩放的 view,此 view 必须是 scrollView 的 subview

  • func scrollViewDidZoom(_ scrollView: UIScrollView)
    当 scrollView 缩放时调用,在缩放过程中会被多次调用

  • func scrollViewWillBeginZooming(_ scrollView: UIScrollView, with view: UIView?)
    scrollView 开始缩放时调用

  • func scrollViewDidEndZooming(_ scrollView: UIScrollView, with view: UIView?, atScale scale: CGFloat)
    scrollView 结束缩放时调用

  • func scrollViewShouldScrollToTop(_ scrollView: UIScrollView) -> Bool
    是否允许点击 scrollview 的头部,让其滚动到最上面,若不实现此代理,则默认为 true
  • func scrollViewDidScrollToTop(_ scrollView: UIScrollView)
    当滚动到最上面时调用