Один индикатор для загрузки нескольких файлов
Я пытаюсь загрузить 2 изображения (по одному), используя 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];
}
}
Как я могу использовать один индикатор выполнения, чтобы показать прогресс в случае загрузки 2 изображений?
1 ответ
Лучший способ - это использовать NSProgress
что позволяет свернуть ребенка NSProgress
обновления в один.
Так определите родителя
NSProgress
:@property (nonatomic, strong) NSProgress *parentProgress;
Создать
NSProgress
и скажиNSProgressView
наблюдать это:self.parentProgress = [NSProgress progressWithTotalUnitCount:2]; self.parentProgressView.observedProgress = self.parentProgress;
Используя
observedProgress
изNSProgressView
, когда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;
Обновление completedUnitCount
индивидуального ребенка NSProgress
объекты будут автоматически обновлять fractionCompleted
родителя NSProgress
объект, который, потому что вы наблюдаете это, обновит ваш прогресс прогресса соответственно.
Просто убедитесь, что totalUnitCount
для родителя, чтобы быть равным сумме pendingUnitCount
из детей.