Ios 活动指示器在执行时不显示
当用户点击登录按钮时,我试图显示一个活动指示器。如果我将Ios 活动指示器在执行时不显示,ios,swift,uiactivityindicatorview,Ios,Swift,Uiactivityindicatorview,当用户点击登录按钮时,我试图显示一个活动指示器。如果我将startActivityIndicator()代码放入viewDidLoad()中,它将完全按照预期显示在屏幕上。当我将其作为btnSignIn()中的第一步执行时,它从未出现。有点迷路了,所以我希望堆栈大师能帮上忙 // Here are the variable declarations var activityIndicator: UIActivityIndicatorView = UIActivityIndicatorView()
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()
}
使用my
delay
实用程序(请参见此处:),按如下方式重写:
@IBAction func btnSignIn(sender: AnyObject) {
startActivityIndicator()
delay(0.1) {
if validateEmailAddress(txtEmailAddress.text!) == false {
// ... everything else goes here ...
}
}
延迟使活动指示器有机会出现并开始旋转。@AnthonyDito UIActivityIndicatorView没有方法startActivityIndicator()@AnthonyDito我想这就是你的意思。但他已经在调用该方法了。这很奇怪……调用该方法就像我在这里从
viewdiload()
调用一样,没有问题。你确定在调用Parse之前没有遇到两个条件之一吗?你用断点测试了吗?是的,我设置了断点以确保它不会影响它们,同时设置了一个断点以确保活动指示器代码正在执行。这就是方法。你现在只是在炫耀@matt:)工作得很好。你知道我为什么要耽搁吗?除了解决我的问题,我还在努力学习。我当然知道为什么。你也是。您自己在一条评论中给出了原因。我假设您指的是“刷新”的评论,但我验证了startActivityIndicator在第一次验证检查开始之前完成。我意识到你有更好的事情要做,还有更多的人要节省:)如果你有时间解释一下,那就太好了。如果没有,不用担心,再次感谢!我写了一整本书向你解释这一点延迟使重画时刻(当前事务的结束)有机会显示活动指示器并在动画服务器线程上开始旋转。