现在我显示硬编码的进度条,填写2秒(平均响应时间)。但我希望它是聪明的。
我的请求看起来像这样。
func makeRequest(to endPoint: String) {
Alamofire.request(endPoint).responseJSON{ response in
if let value = response.result.value {
let responseInJSON = JSON(value)
self._responseInJSON = responseInJSON
}
}
}
期待您的帮助。 感谢。
答案 0 :(得分:1)
我希望它能帮助我指出评论。
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秒这样的静态时间。
答案 1 :(得分:1)
您可以尝试一下。
这是在扩展中执行此操作的一种方法,可将其添加到您的所有UIViewControllers中……
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)
参考:http://brainwashinc.com/2017/07/21/loading-activity-indicator-ios-swift/
答案 2 :(得分:0)
对于简单的GET请求,遗憾的是由于HTTP协议的限制而不是iOS,这是不可能的。这种事情唯一可能的时候是通过比特流下载类似视频的内容,然后只有当服务器首先告诉客户端文件总大小时才会这样。
有趣的是,Apple自己的消息和Safari应用程序中的进度条完全是假的。如果你仔细观察它们,你会发现杆以固定的速度前进到大约85%,它将停止直到请求结束,此时它将跳到最后。这是由于上述HTTP协议的限制,并不是Apple可以做任何事情。
你可以显示UIActivityIndicator以向用户显示正在进行网络通话,您可以在用户界面中创建自己的网络,或者只是在通话结束时拨打UIApplication.shared.networkActivityIndicatorVisible = true
并随后返回false
不幸的是,你不是希望的答案,而是真相。 :(
答案 3 :(得分:0)
你可以试试这个:
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