2013-08-27 4 views
0

У меня есть приложение, которое загружает изображение с сервера. Я хотел бы показать прогресс пользователю. Я читал о UIProgressView в яблочных документах и ​​читал много ответов на этом сайте, но я не могу заставить его работать. Вот мой код В моей viewDidLoad у меня естьUIProgressView не отображается

_profileProgressView.hidden= YES; 
_profileProgressView.progress = 0.0; 

В моей - (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response я показываю UIProgressView, а затем получить ожидаемый размер изображения.

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response { 
     self.profileProgressView.hidden= NO; 
     [self.remote_response setLength:0]; 
     received = 0; 
     self.filesize = [NSNumber numberWithLongLong:[response expectedContentLength]]; 
     NSLog(@"Content Length::%@", self.filesize); 
    } 

В моей - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)d я вычислить процент загружаемых изображений, а затем обновить ход UIProgressView и войти в процесс загрузки.

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)d { 
     [self.remote_response appendData:d]; 

     NSNumber *resourceLength = [NSNumber numberWithUnsignedInteger:[self.remote_response length]]; 
     dispatch_async(dispatch_get_main_queue(),^{ 
       float progress = (_profileProgressView.progress + ([self.filesize floatValue]/[resourceLength floatValue])*100); 
       [self.profileProgressView setProgress:progress animated:YES]; 
       NSLog(@"Downloading %.0f%% complete", _profileProgressView.progress); 
     }); 
    } 

Когда я запускаю этот код

  1. UIProgressView никогда не показывает вверх

  2. В журнале я получаю Downloading 0% complete. Я ожидал получить журнал загружаемого изображения.

Также я думал, что я должен alloc и init в UIProgressView в viewDidDownload, когда я делаю, что я получаю UIProgressView, но он не показывает прогресс и не скрывает, после того, как изображение будет сделано в процессе загрузки.

+0

Почему вы отправляете товар в основную очередь? Ответ делегата вызывается в основном потоке, поэтому вам не нужно этого делать. Кроме того, прогресс находится в масштабе от 0 до 1.0, поэтому я не знаю, почему вы умножаетесь на 100. Кроме того, вы перетаскиваете его на раскадровку? Тогда вам не нужно выделять и инициализировать. – AdamG

+0

Проверьте, является ли объект progressView нулевым или нет. –

+1

Вы сделали [self.view bringSubviewToFront: _profileProgressView]; ?? @Pandey – Learner

ответ

1

Я думаю, что вы слишком усложняете математику боксированием и распаковкой типов данных с помощью NSNumber.

Что я хотел бы сделать, это создать три переменные:

double fileLength; 
double lastProgress; 
double currentLength; 

Затем сделать простую математику:

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response { 
    fileLength = [response expectedContentLength]; 
} 

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)d { 
    double length = [d length]; 
    currentLength += length; 
    double progress = currentLength/fileLength; 

    if (lastProgress < progress) { 
    profileProgressView.progress = progress; 
    lastProgress = progress; 
    } 
} 
+0

Используя ваш код, я NSLog lastProgress, и я мгновенно получаю 1.0. – nupac

+0

opps ... пропустил линию. длина должна быть [d length] как double ... отредактирована. – rogchap

+0

Я все еще получаю то же самое, но я думаю, что у меня такая проблема, потому что мой образ слишком мал – nupac

0

я тоже испытал те же проблемы раньше. В этом случае мы не смогли показать точное представление прогресса. Чтобы показать точный прогресс, ваш сервер должен предоставить байты, отправленные в заголовках ответов. Тогда o u, вы можете получить точные данные в вашей связи: didReceiveData: delegate. Или иначе, вы получите 1,0 мгновенно.

Даже если вы хотите показывать представление прогресса в этом случае без зависимости от сервера, вы можете достичь этого, разделив длину данных на n шагов и используя NSTimer для ее продвижения.

+0

У вас уже нет заголовка 'Content-Length'? – nupac

 Смежные вопросы

  • Нет связанных вопросов^_^