我使用 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()
}
}
}
最佳答案
你可以试试这个
self.timer = Timer.scheduledTimer(timeInterval: 5.0, target: self, selector: #selector(self.timerAction), userInfo: nil, repeats: true)
DispatchQueue.main.async {
self.performLogin()
}
关于swift - 使用 NVActivityIndicatorView 和 Timer,显示很短的时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60088240/