我正在尝试使用NSURLSessionTask上传两个图像(一次一个)。
- (void)URLSession:(NSURLSession *)session
task:(NSURLSessionTask *)task
didSendBodyData:(int64_t)bytesSent
totalBytesSent:(int64_t)totalBytesSent
totalBytesExpectedToSend:(int64_t)totalBytesExpectedToSend
{
if (self.imageName1 != nil && self.imageName2 != nil)
{
float progress = (float)totalBytesSent / (float)totalBytesExpectedToSend;
if (progress != 1.00)
{
// Calculate total bytes to be uploaded or the split the progress bar in 2 halves
}
}
else if (self.imageName1 != nil && self.imageName2 == nil)
{
float progress = (float)totalBytesSent / (float)totalBytesExpectedToSend;
if (progress != 1.00)
[self.progressBar1 setProgress:progress animated:YES];
}
else if (self.imageName2 != nil && self.imageName1 == nil)
{
float progress = (float)totalBytesSent / (float)totalBytesExpectedToSend;
if (progress != 1.00)
[self.progressBar2 setProgress:progress animated:YES];
}
}
在上传两张图片的情况下,我如何使用单个进度条来显示进度?
最好的方法是使用NSProgress
,它允许您将子NSProgress
更新汇总为一个。
-
因此定义一个父
NSProgress
:@property (nonatomic, strong) NSProgress *parentProgress;
-
创建
NSProgress
并告诉NSProgressView
观察它:self.parentProgress = [NSProgress progressWithTotalUnitCount:2]; self.parentProgressView.observedProgress = self.parentProgress;
通过使用
NSProgressView
的observedProgress
,当更新NSProgress
时,相应的NSProgressView
也将自动更新。 -
然后,对于各个请求,创建将被更新的各个子
NSProgress
条目,例如:self.child1Progress = [NSProgress progressWithTotalUnitCount:totalBytes1 parent:self.parentProgress pendingUnitCount:1];
和
self.child2Progress = [NSProgress progressWithTotalUnitCount:totalBytes2 parent:self.parentProgress pendingUnitCount:1];
-
然后,随着各个网络请求的进行,用迄今为止的总字节数更新它们各自的
NSProgress
:self.child1Progress.completedUnitCount = countBytesThusFar1;
单个子对象NSProgress
的completedUnitCount
的更新将自动更新父对象NSProgress
的fractionCompleted
,因为您正在观察到这一点,它将相应地更新您的进度视图。
只需确保父级的totalUnitCount
等于子级的pendingUnitCount
之和。