swift - 使用 NVActivityIndi​​catorView 和 Timer,显示很短的时间

标签 swift timer uiactivityindicatorview

我使用 NVActivityIndi​​catorView 创建了一个加载页面并翻转选项卡屏幕 5 秒钟。

ActivityIndi​​catorView 的生命周期很短,很快就会消失。 使用计时器,我让一个事件在五秒钟内发生。 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 - 使用 NVActivityIndi​​catorView 和 Timer,显示很短的时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60088240/

相关文章:

c# - 在其回调方法中停止计时器

ios - 如何在 UIActivityIndi​​catorView 后面添加黑色背景

ios - 事件指示器持续 5 秒?

ios - 使用 SOAP 的 Swift 和 Web 服务

c++ - 在 C++ 中,使用可用的 linux api,有没有办法让事件在时间 t 过去后发生?

swift - 字符串插值表达式中的文字

Java 如何使用 Timer 制作小游戏

iphone - UIActivityIndi​​catorView 不旋转

swift - 通过快速保持纵横比来调整图像大小

ios - 子类化自定义UICollectionViewLayout实现一定的删除和插入效果