症状
TL;DR
- swift5で下スワイプでぐるぐるなるやつRefreshControl
- 更新はされるが,ぐるぐるの回転が始まるタイミングが遅かった
- 以下のように直した
変更前
@objc func refresh() {
sleep(3)//重い処理を想定
DispatchQueue.main.async {
self.tableView.refreshControl?.endRefreshing()
}
}
変更後
- mainじゃないglobalのスレッド?に並列処理として重い処理を投げる(ニワカナノデヨクワカッテナイ)
@objc func refresh() {
DispatchQueue.global(qos: .default).async(execute: {
sleep(3)/重い処理を想定
DispatchQueue.main.async {
self.tableView.refreshControl?.endRefreshing()
}
})
}
小話
最近iOSアプリを作っていて,公式を参考にひっぱたら更新するやつを書いていましたが,上記の症状に見舞われググること丸1日に溶かしました.ここに書いている通りに書いてみたら動いたので同じ苦しみを味わう不幸な日本語圏の人を産まないようにここにメモしておきます.
(資料) ViewController.swift
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var tableView: UITableView!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
tableView.refreshControl = UIRefreshControl()
tableView.refreshControl?.addTarget(self, action:
#selector(refresh),
for: .valueChanged)
}
@objc func refresh() {
DispatchQueue.global(qos: .default).async(execute: {
sleep(3)/重い処理を想定
DispatchQueue.main.async {
self.tableView.refreshControl?.endRefreshing()
}
})
}
}