Используя NVActivityIndicatorView с таймером, он показывает короткое время - PullRequest
0 голосов
/ 06 февраля 2020

Я использовал 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()
     }

    }
}

1 Ответ

0 голосов
/ 06 февраля 2020

Вы можете попробовать это

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

     DispatchQueue.main.async {

             self.performLogin()
     }
...