Last active
August 17, 2017 20:27
-
-
Save JasonCanCode/31c4497edfc07fbf0187edd5ab5601dc to your computer and use it in GitHub Desktop.
Protocol for added pull-to-refresh to any UIScrollView
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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