Skip to content

Instantly share code, notes, and snippets.

@JasonCanCode
Last active August 17, 2017 20:27
Show Gist options
  • Save JasonCanCode/31c4497edfc07fbf0187edd5ab5601dc to your computer and use it in GitHub Desktop.
Save JasonCanCode/31c4497edfc07fbf0187edd5ab5601dc to your computer and use it in GitHub Desktop.
Protocol for added pull-to-refresh to any UIScrollView
import UIKit
protocol ScrollToRefreshable: UIScrollViewDelegate {
var refreshableScrollView: UIScrollView { get }
var activityIndicatorView: UIActivityIndicatorView! { get }
func updateViewModel()
}
extension ScrollToRefreshable {
private var pullToRefreshThreshold: CGFloat {
return 100.00
}
var shouldRefresh: Bool {
let progress = min(1, max(0, -(refreshableScrollView.contentOffset.y + refreshableScrollView.contentInset.top) / pullToRefreshThreshold))
let hasReachedRefreshThreshold = progress == 1
let isAlreadyLoading = activityIndicatorView.isAnimating
return hasReachedRefreshThreshold && !isAlreadyLoading
}
func setRefreshDelegate() {
let scrollView = refreshableScrollView
scrollView.delegate = self
}
}
/*
Example usage...
extension MyViewController: ScrollToRefreshable {
var refreshableScrollView: UIScrollView {
return tableView as UIScrollView
}
func scrollViewDidScroll(_ scrollView: UIScrollView) {
if shouldRefresh {
loadData()
}
}
}
*/
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment