- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 Collection View 。我正在从 API 获取一些数据并在我的 Collection View 中显示它。一切正常。但是当我加载我的屏幕时 - 首先显示我的屏幕,只有在延迟 5 到 6 秒后,数据才会被填充在我的收藏 View 中。为了解决这个问题,我做了一些dispatch main thread
来快速获取数据。
但有时根据用户手机的数据连接,数据会延迟显示。例如,如果用户的数据连接速度较慢,则需要大约 30 秒(假设)才能在我的 Collection View 中显示数据。
所以,我需要的是 - 如何显示事件指示器 - 直到我的数据显示在我的 Collection View 中。我知道如何创建一个虚拟的 Activity Indicator
并显示 1 到 30 秒。但我必须动态地执行此操作。
这意味着,我需要显示事件指示器,直到数据显示在我的 Collection View 中。它不应取决于用户的数据连接速度。
如何实现?
这是我的代码:
var BTdata = [BTData]()
override func viewDidLoad()
{
super.viewDidLoad()
ListBusinessTypes()
}
// Values from Api for Business Types
func ListBusinessTypes()
{
let token = NSUserDefaults.standardUserDefaults().valueForKey("access_token") as! String
let headers = ["x-access-token": token]
let request = NSMutableURLRequest(URL: NSURL(string: “some url“)!,
cachePolicy: .UseProtocolCachePolicy,
timeoutInterval: 10.0)
request.HTTPMethod = "GET"
request.allHTTPHeaderFields = headers
let session = NSURLSession.sharedSession()
let dataTask = session.dataTaskWithRequest(request, completionHandler: { (data, response, error) -> Void in
if (error != nil)
{
print(error)
let ErrorAlert = UIAlertController(title: "Error", message: "Problem with internet connectivity or server, please try after some time", preferredStyle: UIAlertControllerStyle.Alert)
// add an action (button)
ErrorAlert.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.Default, handler: nil))
// show the alert
self.presentViewController(ErrorAlert, animated: true, completion: nil)
}
else
{
if let json = (try? NSJSONSerialization.JSONObjectWithData(data!, options: [])) as? Dictionary<String,AnyObject>
{
let success = json["success"] as? Int
if(success == 1)
{
if let typeValues = json["data"] as? [NSDictionary]
{
dispatch_async(dispatch_get_main_queue(),{
for item in typeValues
{
self.BTdata.append(BTData(json:item))
}
self.collectionView1!.reloadData()
})
}
}
else
{
let message = json["message"] as? String
let ServerAlert = UIAlertController(title: "Error", message: message, preferredStyle: UIAlertControllerStyle.Alert)
// add an action (button)
ServerAlert.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.Default, handler: nil))
// show the alert
self.presentViewController(ServerAlert, animated: true, completion: nil)
}
}
}
})
dataTask.resume()
}
最佳答案
我对你的代码做了一些修改,下面是
将它们用作类变量
var actView: UIView = UIView()
var loadingView: UIView = UIView()
var activityIndicator: UIActivityIndicatorView = UIActivityIndicatorView()
var titleLabel: UILabel = UILabel()
在你的服务调用函数中
showActivity(self.view, myTitle: "Loading...")
let dataTask = session.dataTaskWithRequest(request) {(data, response, error) in
dispatch_async(dispatch_get_main_queue(), {
if response != nil {
if error != nil {
print(error)
removeActivity(self.view)
let ErrorAlert = UIAlertController(title: "Error", message: "Problem with internet connectivity or server, please try after some time", preferredStyle: UIAlertControllerStyle.Alert)
// add an action (button)
ErrorAlert.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.Default, handler: nil))
// show the alert
self.presentViewController(ErrorAlert, animated: true, completion: nil)
}else {
if let json = (try? NSJSONSerialization.JSONObjectWithData(data!, options: [])) as? Dictionary<String,AnyObject> {
let success = json["success"] as? Int
if(success == 1) {
if let typeValues = json["data"] as? [NSDictionary] {
dispatch_async(dispatch_get_main_queue(),{
for item in typeValues {
self.BTdata.append(BTData(json:item))
}
self.collectionView1!.reloadData()
removeActivity(self.view)
})
} else {
removeActivity(self.view)
}
} else {
removeActivity(self.view)
let message = json["message"] as? String
let ServerAlert = UIAlertController(title: "Error", message: message, preferredStyle: UIAlertControllerStyle.Alert)
// add an action (button)
ServerAlert.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.Default, handler: nil))
// show the alert
self.presentViewController(ServerAlert, animated: true, completion: nil)
}
} else {
removeActivity(self.view)
}
}
}
})
}
dataTask.resume()
开始动画的函数
func showActivity(myView: UIView, myTitle: String) {
myView.userInteractionEnabled = false
myView.window?.userInteractionEnabled = false
myView.endEditing(true)
actView.frame = CGRectMake(0, 0, myView.frame.width, myView.frame.height)
actView.center = myView.center
actView.backgroundColor = UIColor(red: 0, green: 0, blue: 0, alpha: 0.3)
loadingView.frame = CGRectMake(0, 0, 80, 80)
loadingView.center = myView.center
loadingView.backgroundColor = THEME_COLOUR
loadingView.clipsToBounds = true
loadingView.layer.cornerRadius = 15
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);
titleLabel.frame = CGRectMake(5, loadingView.frame.height-20, loadingView.frame.width-10, 20)
titleLabel.textColor = UIColor.whiteColor()
titleLabel.adjustsFontSizeToFitWidth = true
titleLabel.textAlignment = NSTextAlignment.Center
titleLabel.text = myTitle
titleLabel.font = IH_DELEGATE.BoldAppFontOfSize(10)
loadingView.addSubview(activityIndicator)
actView.addSubview(loadingView)
loadingView.addSubview(titleLabel)
myView.addSubview(actView)
activityIndicator.startAnimating()
}
停止动画的函数
func removeActivity(myView: UIView) {
myView.userInteractionEnabled = true
myView.window?.userInteractionEnabled = true
activityIndicator.stopAnimating()
actView.removeFromSuperview()
}
编辑 忘了说
let THEME_COLOUR = UIColor (red:0.188, green:0.682, blue:0.886, alpha:1)
关于ios - 如何在我的 Collection View 中显示数据获取和显示之前的事件指示器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37043121/
我正在寻找一种使此打印 HTML 代码 fragment 向后兼容旧 Android 版本的简单方法: @TargetApi(Build.VERSION_CODES.KITKAT) private v
我在 GCC 终端 (centos linux) 中为 ATM 项目编译以下 c 和 .h 代码时收到以下错误。请帮忙,因为我是编程新手。 validate_acc.h #ifndef _VALIDA
在写关于 SO 的不同问题的答案时,我制作了这个片段: @import url('https://fonts.googleapis.com/css?family=Shadows+Into+Light'
试图弄清楚我应该如何在 my_div_class 之前放置一个 span 而不是替换所有它。现在它取代了 div,但我不想这样做。我假设它类似于 :before 但不知道如何使用它。 { va
我正在使用选择库 http://github.hubspot.com/select/和 noUiSlider https://refreshless.com/nouislider/ .我面临的问题如下
我是开发新手,独自工作。我正在使用 Xcode 和 git 版本控制。可能我没有适本地组织和做错事,但我通常决定做 promise 只是为了在我破坏一切之前做出安全点。在那一刻,我发现很难恰本地描述我
我想确保在同一个桶和键上读取和写入时,应该更新获取的值,也就是说,应该在对其进行写入操作之后获取它。我怎样才能做到这一点? 我想要的是,如果我更新一个键的值,如果我同时使用不同线程获取值,则更新同一个
我的问题与this有关问题,已经有了答案: yes, there is a happens-before relationship imposed between actionsof the thre
The before and after hook documentation on Relish仅显示 before(:suite) 在 before(:all) 之前调用。 我什么时候应该使用其中
我有 CSV 行,我想在其中检测所有内部双引号,没有文本限定符。这几乎可以正常工作,但我的正则表达式还可以检测双引号后的字符。 CSV 部分: "7580";"Lorem ipsum";"";"Lor
是否可以通过Youtube数据API检查广告是否可以与特定视频一起显示? 我了解contentDetails.licensedContent仅显示视频是否已上传至同一伙伴然后由其声明版权。由于第三者权
考虑一下用漂亮的彩色图表描述的“像素管道” https://developers.google.com/web/fundamentals/performance/rendering/ 我有一个元素(比
之前?
在 MVC3 中,我可以轻松地将 jQuery 脚本标签移动到页面底部“_Layout.vbhtml” 但是,在 ASP.NET MVC3 中,当您使用编辑器模板创建 Controller 时,脚手
悬停时内容被替换,但是当鼠标离开元素时我希望它变回来。我该怎么做? $('.img-wrap').hover(function(){ $(this).find('h4').text('Go
已关闭。这个问题是 not reproducible or was caused by typos 。目前不接受答案。 这个问题是由拼写错误或无法再重现的问题引起的。虽然类似的问题可能是 on-top
已关闭。这个问题是 not reproducible or was caused by typos 。目前不接受答案。 这个问题是由拼写错误或无法再重现的问题引起的。虽然类似的问题可能是 on-top
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 已关闭 9 年前。 有关您编写的代码问题的问题必须在问题本身中描述具体问题 - 并包含有效代码以重现该问题。
版本:qwt 6.0.1我尝试开发频谱的对数缩放。我使用简单的线条来启用缩放plotspectrum->setAxisScaleEngine(QwtPlot::yLeft, new QwtLog10S
我有两个相同的表,I_Subject 和 I_Temp_Subject,我想将 Temp_Subject 表复制到 Subject 表。 I_Temp_Subject 由简单用户使用,I_Subjec
我的印象是第一次绘制发生在触发 DOMContentLoaded 事件之后。特别是,因为我认为为了让第一次绘制发生,需要渲染树,它依赖于 DOM 构造。另外,我知道 DOM 构造完成时会触发 DOMC
我是一名优秀的程序员,十分优秀!