1. 获取 UIScrollView 是否处于滑动中
detect UIScrollView whether in scrolling.
lazy var scrolling = false {
didSet {
print("scrolling: \(scrolling)")
}
}
方法1:
// MARK: - UIScrollViewDelegate
func scrollViewWillBeginDragging(_ scrollView: UIScrollView) {
scrolling = true
}
func scrollViewDidEndDragging(_ scrollView: UIScrollView, willDecelerate decelerate: Bool) {
if !decelerate {
scrolling = false
}
}
func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
scrolling = false
}
func scrollViewDidEndScrollingAnimation(_ scrollView: UIScrollView) {
scrolling = false
}
方法2:
// MARK: - UIScrollViewDelegate
func scrollViewDidScroll(_ scrollView: UIScrollView) {
if !scrolling {
scrolling = true
}
perform(#selector(UIScrollViewDelegate.scrollViewDidEndScrollingAnimation(_:)), with: nil, afterDelay: 0.3)
}
func scrollViewDidEndScrollingAnimation(_ scrollView: UIScrollView) {
NSObject.cancelPreviousPerformRequests(withTarget: self)
scrolling = false
}
2. 获取 UIScrollView 的滑动方向
lazy var scrollDown = false {
didSet {
print("scrollDown: \(scrollDown)")
}
}
func scrollViewDidScroll(_ scrollView: UIScrollView) {
let velocity = scrollView.panGestureRecognizer.velocity(in: scrollView).y
if velocity != 0 {
scrollDown = velocity > 0
}
}