- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我对 iOS 中 GCD 和队列的组合几乎没有怀疑。让我把它们放在这里
首先。根据 IOS6 programming cookbook,这里是使用异步和同步下载图像的小代码片段。如下所示
dispatch_queue_t concurrentQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);dispatch_async (concurrentQueue, ^ {
UIImage *image = nil;
dispatch_sync(concurrentQueue, ^ { /* download image here */ });
dispatch_sync(dispatch_get_main_queue, ^ { /* show the downloaded image here */ });
});
其次。我需要从 Url 下载一些图片,同时我需要更新进度 View 以显示已下载了多少图片。所以我正在使用以下代码片段
dispatch_queue_t concurrentQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_async (concurrentQueue, ^ { dispatch_sync(dispatch_get_main_queue, ^ { /* download image here and update progress view here */ });
});
请注意,我正在更新主线程上的进度 View 。但是我的进度 View 是在所有图像下载完成后显示的。我检查了其他链接,但对答案不是很清楚。没有得到问题的原因。我的代码如下。
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{dispatch_sync(dispatch_get_main_queue(), ^{
alert = [[UIAlertView alloc] initWithTitle:@"Please Wait Downloading reports..." message:nil delegate:self cancelButtonTitle:nil otherButtonTitles: nil] ;
prgView = [[UIProgressView alloc]initWithProgressViewStyle:UIProgressViewStyleBar];
prgView.frame = CGRectMake(10, 50, 270, 20);
[alert addSubview:prgView];
[alert show];
prgView.progress=0.0;
actual= 0.0;
for(NSInteger i=0; i<[fileLinks count];i++)
{
// [self downLoadFileFromUrl : fileLinks[i]: i ];
NSLog(@"Url is %@", fileLinks[i]);
NSLog(@"i value is %d", i);
NSData *imagedata = [NSData dataWithContentsOfURL:[NSURL URLWithString:fileLinks[i]]];
NSString * _filename= [fileLinks[i] lastPathComponent];
NSMutableString *filePath = [[NSMutableString alloc] initWithFormat:@"%@", [VSCore getTempFolder]];
[filePath appendString: _filename] ;
[imagedata writeToFile: filePath atomically:YES];
prgView.progress =((float) i /([fileLinks count]));
NSLog(@" progress value is %f", prgView.progress);
}
});
});
那么这里有什么问题呢?我的另一个疑问是,如果有人想在执行长时间处理任务时保留用户(显示进度 View 或事件指示器),他们不能在主线程中这样做吗? (如果它们显示进度条或事件指示器),为什么我们必须使用异步、与并发线程或主线程同步等的组合。
我有点困惑,在什么情况下我必须使用异步、同步、主队列、并发队列、串行队列的适当组合。如果有人给我解释或为我提供很好的链接以了解 async 、 sync 和 3 queue 的组合。那会很棒。
最佳答案
您应该在主队列上创建和更新“UIProgressView”
然后在另一个队列(不是主队列)上做你的工作
在你工作的时候,如果你想更新 GUI 上的任何对象,你应该在主队列上进行
你可以这样做:
alert = [[UIAlertView alloc] initWithTitle:@"Please Wait Downloading reports..." message:nil delegate:self cancelButtonTitle:nil otherButtonTitles: nil] ;
prgView = [[UIProgressView alloc]initWithProgressViewStyle:UIProgressViewStyleBar];
prgView.frame = CGRectMake(10, 50, 270, 20);
[alert addSubview:prgView];
[alert show];
prgView.progress=0.0;
actual= 0.0;
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
for(NSInteger i=0; i<[fileLinks count];i++)
{
// [self downLoadFileFromUrl : fileLinks[i]: i ];
NSLog(@"Url is %@", fileLinks[i]);
NSLog(@"i value is %d", i);
NSData *imagedata = [NSData dataWithContentsOfURL:[NSURL URLWithString:fileLinks[i]]];
NSString * _filename= [fileLinks[i] lastPathComponent];
NSMutableString *filePath = [[NSMutableString alloc] initWithFormat:@"%@", [VSCore getTempFolder]];
[filePath appendString: _filename] ;
[imagedata writeToFile: filePath atomically:YES];
dispatch_async(dispatch_get_main_queue(), ^{
prgView.progress =((float) i /([fileLinks count]));
});
NSLog(@" progress value is %f", prgView.progress);
}
});
你可以阅读电子书:“Pro.Multithreading.and.Memory.Management.for.iOS.and.OS.X”(购买或询问 gg)
祝你好运!
关于ios - 如何在异步线程中更新 ProgressView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17919085/
我正在尝试制作一个似乎是进度 View 自定义的控件。这是我应该做的。它是一个进度条,可以用作倒数计时器。从 30 秒开始,条形为绿色。随着时间的推移,酒吧越来越短。当时间为 20 秒时,该条变为黄色
我对 iOS 中 GCD 和队列的组合几乎没有怀疑。让我把它们放在这里 首先。根据 IOS6 programming cookbook,这里是使用异步和同步下载图像的小代码片段。如下所示 dispat
我对嵌套类等有疑问。我有一个 UIView 正在处理将 JSON 数据下载到设备上,并且我有一个显示用户进度的进度条。因为我必须等待整个下载完成才能继续,所以我实现了一个辅助类,这样我就可以使用尾随闭
我想在 CollectionViewCell 中添加一个 progressView。 ProgressView 应该是动画的,并在精确的 10 秒内从 1 到 0 运行进度。 所以现在我对每个 pro
我不使用:ASIHTTPRequest、AFNetworking、RestKit。 我有多个图像/文件要通过异步调用网络服务进行下载。 我在下载过程中显示 SVProgressHUD(Activity
我有一个问题。我有一个 UITableView 和一个带有 UIProgressView 的 View ,当我滚动表格时,progressview 不会刷新进度值......只有当滚动完成时,进度才会
我通过将进度 View 和标签作为 subview 添加到警报 View 来显示进度 View 和标签,这在 IOS6 上运行良好,我在 IOS7 上测试了同样的东西,但进度 View 和标签没有显示
我的问题是 ProgressView 只出现在前 2 个单元格中。我的代码有什么问题? 注意:我的 CollectionView 水平滚动,每个单元格覆盖整个屏幕。我认为这可能与此有关,因为我尝试在同
我希望在加载 URL 时,progressView 能够正常工作。我该怎么办? 这是我的 .m 代码: -(void)openURL{ UIWebView *webView = [[UIWebVi
当您设置或更新 progressView 的 float 时,它会自动更新 progressView 吗? 比如调用一个方法: - (void) updateProgress:(float)progr
我有这个方法: func stepThree() { operation = "prDatas" let entries = self.data.componentsSeparated
我正在尝试弄清楚如何使用 progressView 来显示使用 Realm 下载的内容的进度。通过阅读似乎需要找到一个名为 progress 的 Float,但我不知道如何在 Realm 中找到它。我
我想实现一个 UIProgressView,它在 8 秒内从 0 加载到 100,但它没有工作。 这是我的代码。 ProgressView appaers 正确,但它不会自行更新它们。我的错是什么?
我正在尝试弄清楚如何做到这一点。我希望我的 actionBar 的背景颜色像进度条一样具有动画效果。就像某种渐变动画。 这是 iOS 上类似行为的示例:http://youtu.be/LFq311lO
我有一个 TableView 列表,其中有一个选择操作与之相关。当用户选择该行时,它会提示他们并开始下载文件并使用进度指示器显示进度。出于某种原因,指标从选择中每 12 条记录显示一次。为什么会这样…
我想放一个 ProgressView里面Picker标签。当我点击 Hide Spinner 按钮时,这(间歇性)会因 EXC_BAD_ACCESS(代码=EXC_I386_GPFLT)崩溃。 str
这不适用 ProgressView("\(spinnerLabel)") .accentColor(.white) 这改变了标签 .foregroundColor(.white) 最佳答案 尝
有什么方法可以在某处将事件 View (指示器)添加到 SwiftUI 警报中吗?我只是好奇,因为我还没有找到关于这样的问题的任何合适的答案。我需要这样的东西: 我正在使用 iOS 14 SwiftU
有什么方法可以在某处将事件 View (指示器)添加到 SwiftUI 警报中吗?我只是好奇,因为我还没有找到关于这样的问题的任何合适的答案。我需要这样的东西: 我正在使用 iOS 14 SwiftU
我正在尝试更新自定义表格 View 单元格的进度 View ,但进度 View 不会更新。 我可以在表格 View 单元格上设置标签,但无法访问进度条或事件指示器等内容。 我在自定义单元格上执行以下操
我是一名优秀的程序员,十分优秀!