【问题标题】:Using NVActivityIndicatorView with Timer, it shows short time使用 NVActivityIndi​​catorView 和 Timer,它显示的时间很短
【发布时间】:2020-02-06 05:28:49
【问题描述】:

我用NVActivityIndi​​catorView创建了一个加载页面,翻动tab画面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()
     }

    }
}

【问题讨论】:

  • 使用定时器有什么具体原因吗?,我认为当你想显示加载器时没有使用定时器。
  • 服务器未设置。我无法连接网络访问我认为计时器对工作 ActivityIndi​​catorView 有好处。

标签: swift timer uiactivityindicatorview


【解决方案1】:

你可以试试这个

self.timer = Timer.scheduledTimer(timeInterval: 5.0, target: self, selector: #selector(self.timerAction), userInfo: nil, repeats: true)

     DispatchQueue.main.async {

             self.performLogin()
     }

【讨论】:

  • VC 显示像gph.is/g/Zd715Ow。它改变了tabbarcontroller。它最近显示。
  • @Sunmi 在定时器中设置 performLogin()?.invalidate()
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-21
  • 1970-01-01
  • 2021-01-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多