gpt4 book ai didi

ios - MBProgressHUD 在 GCD 之后隐藏指示器

转载 作者:行者123 更新时间:2023-11-29 12:41:55 25 4
gpt4 key购买 nike

用户可以点击一个按钮来下载一组 map ,完成该任务后,我想隐藏进度指示器。我已经尝试了以下代码的几种变体,但没有实现我正在搜索的内容。任何指导将不胜感激。

 - (IBAction)SavePhotoOnClick:(id)sender{


HUD = [[MBProgressHUD alloc] initWithView:self.navigationController.view];
[self.navigationController.view addSubview:HUD];
dispatch_async(dispatch_get_global_queue( DISPATCH_QUEUE_PRIORITY_LOW, 0), ^{
NSURL *url = [NSURL URLWithString:urlstr1];
UIImage *image = [UIImage imageWithData:[NSData dataWithContentsOfURL:url]];
UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil); dispatch_async(dispatch_get_main_queue(), ^{
[MBProgressHUD hideHUDForView:self.view animated:YES];
});
});



// Set determinate mode
HUD.mode = MBProgressHUDModeDeterminate;
HUD.dimBackground = YES;
HUD.color = [UIColor colorWithRed:0.23 green:0.50 blue:0.82 alpha:0.90];
HUD.delegate = self;
HUD.labelText = @"Downloading Maps";

// myProgressTask uses the HUD instance to update progress
[HUD showWhileExecuting:@selector(myProgressTask) onTarget:self withObject:nil animated:YES];
}


- (void)myProgressTask {
// This just increases the progress indicator in a loop
float progress = 0.0f;
while (progress < 1.0f) {
progress += 0.01f;
HUD.progress = progress;
usleep(40000);
}
}

删除 progresstask 方法和 showWhileExecuting 代码会删除进度指示器。似乎 usleep 覆盖了所有内容,并且不允许在下载完成后隐藏进度指示器,而是在 4 秒后将其删除。

最佳答案

你的问题是 myProgressTask 没有执行任何实际工作:你的下载实际上发生在你的 dispatch_async 调用中。在开始网络请求之前使用 [hud showHUDAddedTo: self.navigationController.view animated:YES]; 之类的调用,以便在下载完成时隐藏它。这只会显示旋转指示器,而不是进度圈。

如果你想要进度圈,你需要使用NSURLConnection及其相关的delegate methods跟踪下载进度。具体来说,查看 connection:didReceiveResponse: 方法——使用 expectedContentLength 计算百分比,使用从 connection:didReceiveData: 获得的值增量更新此进度的方法。

查看 this question有关如何执行此操作的示例。

关于ios - MBProgressHUD 在 GCD 之后隐藏指示器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24665652/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com