NetNewsWire/iOS/UIKit Extensions/AccountRefreshControl.swift

52 lines
1.6 KiB
Swift

//
// AccountRefreshControl.swift
// NetNewsWire-iOS
//
// Created by Maurice Parker on 1/2/20.
// Copyright © 2020 Ranchero Software. All rights reserved.
//
import UIKit
import Account
class AccountRefreshControl: UIRefreshControl {
var errorHandler: ((Error) -> ())? = nil
init(errorHandler: @escaping (Error) -> ()) {
super.init()
self.errorHandler = errorHandler
addTarget(self, action: #selector(refreshAccounts(_:)), for: .valueChanged)
}
required init?(coder: NSCoder) {
fatalError()
}
@objc func refreshAccounts(_ sender: Any) {
let checkImageView = UIImageView(image: UIImage(systemName: "checkmark.circle.fill"))
checkImageView.tintColor = .label
checkImageView.translatesAutoresizingMaskIntoConstraints = false
addSubview(checkImageView)
NSLayoutConstraint.activate([
checkImageView.heightAnchor.constraint(equalToConstant: 35.0),
checkImageView.widthAnchor.constraint(equalToConstant: 35.0),
checkImageView.centerXAnchor.constraint(equalTo: centerXAnchor),
checkImageView.centerYAnchor.constraint(equalTo: centerYAnchor)
])
DispatchQueue.main.asyncAfter(deadline: .now() + 0.33) {
self.endRefreshing()
checkImageView.removeFromSuperview()
// This is a hack to make sure that an error dialog doesn't interfere with dismissing the refreshControl.
// If the error dialog appears too closely to the call to endRefreshing, then the refreshControl never disappears.
DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) {
AccountManager.shared.refreshAll(errorHandler: self.errorHandler!)
}
}
}
}