UIRefreshControlを使ったPullToRefreshでrefreshのタイミングを変えたい
はじめに
を参考にしたUIRefreshControlに
addTarget(self, action: #selector(refresh), for: .valueChanged)
するやり方だとrefreshのタイミングに違和感があったので別のタイミングでrefreshを行いたかった
結論
UIScrollViewのdelegateの任意のタイミングでrefreshの処理を呼び出しましょう
個人的にはscrollViewWillEndDraggingかscrollViewWillBeginDeceleratingぐらいで
refreshするのがsafariやtwitterのPullToRefreshに近くてしっくりきました
class XXXViewController: UIViewController, UIScrollViewDelegate {
@IBOutlet weak var webView: WKWebView! {
didSet {
webView.scrollView.delegate = self
webView.scrollView.refreshControl = UIRefreshControl()
}
}
override func viewDidLoad() {
super.viewDidLoad()
}
private func refresh() {
reload()
}
private func didRefresh() {
webView.scrollView.refreshControl?.endRefreshing()
}
// 指を離してスクロール位置が上まで戻った時
func scrollViewWillBeginDecelerating(_ scrollView: UIScrollView) {
guard let isRefreshing = webView.scrollView.refreshControl?.isRefreshing else { return }
if isRefreshing {
webView.refresh()
}
}
// 指を離した時
func scrollViewWillEndDragging(_ scrollView: UIScrollView, withVelocity velocity: CGPoint, targetContentOffset: UnsafeMutablePointer<CGPoint>) {
guard let isRefreshing = webView.scrollView.refreshControl?.isRefreshing else { return }
if isRefreshing {
webView.refresh()
}
}
}
おまけ
addTargetするやり方も一応記載しておきます
下に引っ張ると閾値(50ptぐらい?)を超えたタイミングでrefreshが呼び出されます
class XXXViewController: UIViewController {
@IBOutlet weak var webView: WKWebView!
override func viewDidLoad() {
super.viewDidLoad()
webView.scrollView.refreshControl = UIRefreshControl()
webView.scrollView.refreshControl?.addTarget(self, action: #selector(refresh), for: .valueChanged)
}
@objc
private func refresh() {
reload()
}
private func didRefresh() {
webView.scrollView.refreshControl?.endRefreshing()
}
}
Author And Source
この問題について(UIRefreshControlを使ったPullToRefreshでrefreshのタイミングを変えたい), 我々は、より多くの情報をここで見つけました https://qiita.com/fnm0131/items/953186625dba71c01d77著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .