代码之家  ›  专栏  ›  技术社区  ›  Gurjit Singh

当应用程序从Firebase实时数据库接收数据时,如何显示UIActivityIndicator

  •  1
  • Gurjit Singh  · 技术社区  · 6 年前

    在接收firebase实时数据库的数据时,我找不到显示UIActivityIndicator的任何东西。到目前为止,我已经使用了这个代码,但它对我来说不起作用。

    //Check if the internet is connected or not
        let connectedRef = Database.database().reference(withPath: ".info/connected")
        connectedRef.observe(.value, with: { snapshot in
    
            let myActivityIndicator = UIActivityIndicatorView(activityIndicatorStyle: UIActivityIndicatorViewStyle.whiteLarge)
            myActivityIndicator.center = self.view.center
    
            if snapshot.value as? Bool ?? false {
                print("Connected")
                myActivityIndicator.stopAnimating()
                myActivityIndicator.isHidden = false               
            }
            else {
                myActivityIndicator.startAnimating()
                print("Not connected")
            }
    
           testView.addSubview(myActivityIndicator)
        })
    
    1 回复  |  直到 6 年前
        1
  •  3
  •   Sharkes Monken    6 年前

    您需要在firebase observer回调范围外开始设置UIActivityIndicatorView的动画,并在观察者返回快照后停止。

    var activityIndicator: UIActivityIndicatorView! 
    
    override func viewDidLoad() {
      var activityIndicator = UIActivityIndicatorView(activityIndicatorStyle: 
       UIActivityIndicatorViewStyle.Gray) 
       activityIndicator.hidesWhenStopped = true; 
       activityIndicator.isHidden = true 
       activityIndicator.center = view.center;
       addSubview(myActivityIndicator)
       super.viewDidLoad()
    }
    
    func firebaseObserver() {
      // Show indicator 
      activityIndicator.isHidden = false
      activityIndicator.startAnimating()
    
      // Firebase network observer 
      let connectedRef = Database.database().reference(withPath: ".info/connected")
    connectedRef.observe(.value, with: { snapshot in
    
       // Stop and hide indicator
       self.activityIndicator.stopAnimating()
       self.activityIndicator.isHidden = true
    
       // Proceed with other operations.
         })
    }