Я использовал NVActivityIndicatorView для создания страницы загрузки и переворачивания экрана вкладок на 5 секунд.
ActivityIndicatorView недолговечен и быстро исчезает. Используя таймер, я произвел событие за пять секунд. Timer.scheduledTimer()
используется DispatchQueue.main.async{}
. Я думал, что это работает основной поток. Я изменил timeInterval, и он не изменился.
DispatchQueue.main.async {
self.timer = Timer.scheduledTimer(timeInterval: 5.0, target: self, selector: #selector(self.timerAction), userInfo: nil, repeats: true)
self.performLogin()
}
Код
import UIKit
import NVActivityIndicatorView
class AutoLoginViewController: UIViewController, NVActivityIndicatorViewable {
var timer: Timer?
var indicatorView: NVActivityIndicatorView!
override func viewDidLoad() {
super.viewDidLoad()
setup()
getToken(username: "yoshimi", password: "11111")
}
override func viewWillDisappear(_ animated: Bool) {
stopIndicator()
}
// MARK: - Setup
private func setup() {
var midY = self.view.frame.height / 2
var midX = self.view.frame.width / 2
let frame = CGRect(x: midX, y: midY, width: 30, height: 30)
indicatorView = NVActivityIndicatorView(frame: frame,
type: .ballScaleRippleMultiple)
indicatorView?.tintColor = .white
}
// MARK: - Segue
private func performLogin() {
guard
let tabBarController = R.storyboard.main.ramAnimatedTabBarController(),
let mainViewController = tabBarController.viewControllers?.first as? MainViewController
else {
return
}
self.present(tabBarController, animated: true, completion: nil)
}
// MARK: - run indicator
@objc func timerAction() {
let size = CGSize(width: 30, height: 30)
UIView.animate(withDuration: 5.0) {
self.indicatorView.startAnimating()
self.startAnimating(size,message: "Loading...", type: .ballScaleRippleMultiple, fadeInAnimation: nil)
}
timer?.invalidate()
}
private func stopIndicator() {
self.indicatorView.stopAnimating()
self.stopAnimating(nil)
}
// MARK: - APIs
private func getToken(username: String?, password: String?) {
guard
let username = username,
let password = password
else {
return
}
API.LoginClass.getToken(username: username, password: password) { (token, success) in
guard success, let token = token else {
self.loginError()
return
}
Configure.token = token
self.login(username: username, password: password)
}
DispatchQueue.main.async {
self.timer = Timer.scheduledTimer(timeInterval: 5.0, target: self, selector: #selector(self.timerAction), userInfo: nil, repeats: true)
self.performLogin()
}
}
}