2015-10-08 43 views
0

我試圖在用戶點擊登錄按鈕時顯示活動指示器。如果我將startActivityIndicator()代碼放在viewDidLoad()中,它將完全按照預期顯示在屏幕上。當我將它作爲btnSignIn()的第一步執行時,它永遠不會出現。有點失落,所以我希望堆棧大師的幫助......執行時未顯示活動指示器

// Here are the variable declarations 
var activityIndicator: UIActivityIndicatorView = UIActivityIndicatorView() 
var loadingView: UIView = UIView() 
var viewCenter:CGPoint! 

@IBAction func btnSignIn(sender: AnyObject) { 

    startActivityIndicator() 

    if validateEmailAddress(txtEmailAddress.text!) == false { 
     stopActivityIndicator(self.loadingView) 
     return 
    } 

    if validatePassword(txtPassword.text!) == false { 
     stopActivityIndicator(self.loadingView) 
     return 
    } 

    PFUser.logInWithUsernameInBackground(txtEmailAddress.text!, password:txtPassword.text!) { 
     (user: PFUser?, error: NSError?) -> Void in 
     if user != nil { 

      // Successful login. 
      self.txtPassword.resignFirstResponder() 
      self.txtEmailAddress.resignFirstResponder() 

      self.getUserInfo() 

     } else { 
      self.stopActivityIndicator(self.loadingView) 
      // The login failed. Display alert. 
      self.displayAlert("Whoops!", message: "Email or Password are incorrect.") 
     } 
    } 
} 

func startActivityIndicator() { 

    loadingView.frame = CGRectMake(0, 0, 80, 80) 
    loadingView.center = viewCenter 
    print(viewCenter) 
    loadingView.backgroundColor = UIColorFromRGB("444444", alpha: 0.7) 
    loadingView.clipsToBounds = true 
    loadingView.layer.cornerRadius = 10 

    activityIndicator.frame = CGRectMake(0.0, 0.0, 40.0, 40.0); 
    activityIndicator.activityIndicatorViewStyle = UIActivityIndicatorViewStyle.WhiteLarge 
    activityIndicator.center = CGPointMake(loadingView.frame.size.width/2, loadingView.frame.size.height/2); 

    view.addSubview(loadingView) 
    loadingView.addSubview(activityIndicator) 

    UIApplication.sharedApplication().beginIgnoringInteractionEvents() 

    activityIndicator.startAnimating() 

} 

func stopActivityIndicator(uiView: UIView) { 

    activityIndicator.stopAnimating() 
    loadingView.removeFromSuperview() 
    UIApplication.sharedApplication().endIgnoringInteractionEvents() 
} 
+0

@AnthonyDito UIActivityIndi​​catorView沒有方法startActivityIndi​​cator() –

+0

@AnthonyDito我想這就是你的意思。不過他已經在調用這種方法了。 –

+0

這很奇怪...調用方法就像我在viewDidLoad()中做的一樣,沒有問題。 – Robert

回答

2

用我delay實用程序(在這裏看到:https://stackoverflow.com/a/24318861/341994),改寫這樣的:

@IBAction func btnSignIn(sender: AnyObject) { 
    startActivityIndicator() 
    delay(0.1) { 
     if validateEmailAddress(txtEmailAddress.text!) == false { 
     // ... everything else goes here ... 
    } 
} 

延遲給活動指標有機會出現並開始旋轉。

+0

這是做到這一點的方法。 –

+0

你現在只是炫耀@matt :)工作完美。你知道我爲什麼需要延遲嗎?除了解決我的問題,我還在學習。 – Robert

+0

當然我知道爲什麼。你也是。你在評論中自己給出了理由。 – matt