一个进度条用于多个文件上传



我正在尝试使用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更新汇总为一个。

  1. 因此定义一个父NSProgress:

    @property (nonatomic, strong) NSProgress *parentProgress;
    
  2. 创建NSProgress并告诉NSProgressView观察它:

    self.parentProgress = [NSProgress progressWithTotalUnitCount:2];
    self.parentProgressView.observedProgress = self.parentProgress;
    

    通过使用NSProgressViewobservedProgress,当更新NSProgress时,相应的NSProgressView也将自动更新。

  3. 然后,对于各个请求,创建将被更新的各个子NSProgress条目,例如:

    self.child1Progress = [NSProgress progressWithTotalUnitCount:totalBytes1 parent:self.parentProgress pendingUnitCount:1];
    

    self.child2Progress = [NSProgress progressWithTotalUnitCount:totalBytes2 parent:self.parentProgress pendingUnitCount:1];
    
  4. 然后,随着各个网络请求的进行,用迄今为止的总字节数更新它们各自的NSProgress

    self.child1Progress.completedUnitCount = countBytesThusFar1;
    

单个子对象NSProgresscompletedUnitCount的更新将自动更新父对象NSProgressfractionCompleted,因为您正在观察到这一点,它将相应地更新您的进度视图。

只需确保父级的totalUnitCount等于子级的pendingUnitCount之和。

相关内容

  • 没有找到相关文章

最新更新