Ios 在Alamofire api请求的响应等待期间,是否有方法显示活动指示器或进度条?使用Swift
现在我显示进度条,硬编码为2秒(平均响应时间)。但我希望它是智能的 我的请求是这样的Ios 在Alamofire api请求的响应等待期间,是否有方法显示活动指示器或进度条?使用Swift,ios,swift,rest,api,alamofire,Ios,Swift,Rest,Api,Alamofire,现在我显示进度条,硬编码为2秒(平均响应时间)。但我希望它是智能的 我的请求是这样的 func makeRequest(to endPoint: String) { Alamofire.request(endPoint).responseJSON{ response in if let value = response.result.value { let responseInJSON = JSON(value) self.
func makeRequest(to endPoint: String) {
Alamofire.request(endPoint).responseJSON{ response in
if let value = response.result.value {
let responseInJSON = JSON(value)
self._responseInJSON = responseInJSON
}
}
}
期待您的帮助。
谢谢。我希望这能帮助我在评论中指出
func makeRequest(to endPoint: String) {
// here you can showActivetyIndicator start progressing here
Alamofire.request(endPoint).responseJSON{ response in
if let value = response.result.value {
let responseInJSON = JSON(value)
self._responseInJSON = responseInJSON
}
// here you can hide Your ActivetyIndicator here
}
}
您只需在Alamofire请求开始之前启动进程,然后在获得API响应后停止。不需要像2秒这样的静态时间。对于一个简单的GET请求,由于HTTP协议(而不是iOS)的限制,很遗憾这是不可能的。这种事情唯一可能发生的时候是通过比特流下载视频之类的东西,然后只有当服务器首先告诉客户端文件的总大小时 有趣的是,苹果自己的信息和Safari应用程序中的进度条完全是假的。如果你仔细观察它们,你会发现条形图以稳定的速度前进到85%左右,在请求完成之前,它会停止,在这一点上它会跳到末尾。这是由于上述HTTP协议的限制,苹果对此无能为力 但是,您可以显示UIActivityIndicator以向用户显示正在发生网络呼叫,您可以在UI中创建自己的,也可以只调用
UIApplication.shared.networkActivityIndicatorVisible=true
,然后在呼叫结束时调用false
不幸的是,这不是你希望得到的答案,而是真相(您可以尝试以下方法:
spin.center = self.view.center
spin.activityIndicatorViewStyle = .WhiteLarge
self.view.addSubview(spin)
spin.startAnimating()
let url = NSURL(string:StoreApi)
let request = NSMutableURLRequest(URL: url!)
request.HTTPMethod = "GET"
Alamofire.request(request)
.responseJSON { response in
// do whatever you want here
switch (response.result) {
case .Success(let JSON):
//do what you want after success
case .Failure:
}//switch close
//Spin is my activity indicator
self.spin.stopAnimating()
self.spin.removeFromSuperview()
}//responseJSON close
你可以试试这个
这里有一种方法可以在扩展中实现,该扩展将它添加到所有UIViewController中
extension UIViewController {
class func displaySpinner(onView : UIView) -> UIView {
let spinnerView = UIView.init(frame: onView.bounds)
spinnerView.backgroundColor = UIColor.init(red: 0.5, green: 0.5, blue: 0.5, alpha: 0.5)
let ai = UIActivityIndicatorView.init(activityIndicatorStyle: .whiteLarge)
ai.startAnimating()
ai.center = spinnerView.center
DispatchQueue.main.async {
spinnerView.addSubview(ai)
onView.addSubview(spinnerView)
}
return spinnerView
}
class func removeSpinner(spinner :UIView) {
DispatchQueue.main.async {
spinner.removeFromSuperview()
}
}
}
要创建和显示微调器,请在视图控制器中执行以下操作:
let sv = UIViewController.displaySpinner(onView: self.view)
除去
UIViewController.removeSpinner(spinner: sv)
Ref:由于无法预测您的响应时间,因此不可能完全按照响应时间来计时。可以将其硬编码为在2秒钟内填充到某一点,如接近尾声,然后暂停片刻,等待响应返回。然后,您将添加一些内容以使其动画化,以便在响应完全进入后快速完成。您将在完成时在
self之后立即调用最终动画。\u responseInJSON=responseInJSON
。我知道这并不完全是您想要的,只是一个选项