在iphone中下载图像时,在UIProgressView中显示准确的进度
我有四个包含图像的网址…
我正在将这些图像下载并将它们放入文档文件夹中. 这是我的代码.. -(void)viewDidLoad { NSMutableArray *myUrlsArray=[[NSMutableArray alloc]init]; [myUrlsArray addObject:@"http://blogs.sfweekly.com/thesnitch/steve_jobs3.jpg"]; [myUrlsArray addObject:@"http://www.droid-life.com/wp-content/uploads/2012/12/Steve-Jobs-Apple.jpg"]; [myUrlsArray addObject:@"http://2.bp.blogspot.com/-T6nbl0rQoME/To0X5FccuCI/AAAAAAAAEZQ/ipUU7JfEzTs/s1600/steve-jobs-in-time-magazine-front-cover.png"]; [myUrlsArray addObject:@"http://images.businessweek.com/ss/08/09/0929_most_influential/image/steve_jobs.jpg"]; [myUrlsArray addObject:@"http://cdn.ndtv.com/tech/gadget/image/steve-jobs-face.jpg"]; for (int i=0; i<myUrlsArray.count; i++) { [self downloadImageFromURL:[myUrlsArray objectAtIndex:i] withName:[NSString stringWithFormat:@"MyImage%i.jpeg",i]]; } } #pragma mark- downloading File -(void)downloadImageFromURL:(NSString *)myURLString withName:(NSString *)fileName { UIImage *image = [[UIImage alloc] initWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:myURLString]]]; NSLog(@"%f,%f",image.size.width,image.size.height); // Let's save the file into Document folder.** NSString *documentsPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES) objectAtIndex:0]; NSString *jpegPath = [NSString stringWithFormat:@"%@/%@",documentsPath,fileName];// this path if you want save reference path in sqlite NSData *data2 = [NSData dataWithData:UIImageJPEGRepresentation(image,1.0f)];//1.0f = 100% quality [data2 writeToFile:jpegPath atomically:YES]; } 现在……我需要准确显示UIProgressView以便上面的下载进度. 我怎样才能实现这个功能…… 任何人都可以提供一些指导来实现这一目标. 提前致谢… 解决方法
我建议您使用一些异步下载技术(AFNetworking,SDWebImage,或使用基于委托的NSURLSession自行编写)而不是dataWithContentsOfURL,以便(a)不阻塞主队列; (b)随着下载的进行,您可以获得进度更新.
我还建议为每次下载创建一个 然后,您可以将每个NSProgress与 或者,如果您和单个UIProgressView显示每个下载的所有NSProgress的聚合进度,您可以创建父NSProgress,将每个下载的NSProgress建立为父NSProgress的子级,然后,当每个下载更新其各自NSProgress,这将自动触发父NSProgress的计算.再次,您可以将该父NSProgress绑定到主UIProgressView,并且您将自动更新具有总进度的UI,只需让每个下载更新其单独的NSProgress. 但是,有一个技巧,因为有些Web服务不会通知您预期的字节数.他们将报告NSURLResponseUnknownLength的“预期字节数”,即-1! (有合理的理由说明为什么它可能超出了这个问题的范围.)这显然很难计算下载的百分比. 在这种情况下,有几种方法: >你可以举起手来,只使用一个不确定的进度指示器; if (totalBytesExpectedToWrite >= totalBytesWritten) { self.progress.totalUnitCount = totalBytesExpectedToWrite; } else { if (totalBytesWritten <= 0) { self.progress.totalUnitCount = kDefaultImageSize; } else { double written = (double)totalBytesWritten; double percent = tanh(written / (double)kDefaultImageSize); self.progress.totalUnitCount = written / percent; } } self.progress.completedUnitCount = totalBytesWritten; 使用tanh函数返回“百分比完整”值,使用kDefaultImageSize作为估计的基础,可以平滑地渐近逼近100%,这有点狡猾. 它并不完美,但它可以为完成百分比提供相当不错的代理. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |