2013-06-09 2 views
0

Я пытаюсь использовать MBProgressHUD для отображения анимации загрузки, в то время как приложение загружает больше json-данных. Вот код, который я использую для вызова функции с включенным MBProgressHUD.Показывать анимацию загрузки при потянув json с afnetworking

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView { 
float bottomEdge = scrollView.contentOffset.y + scrollView.frame.size.height; 
if (bottomEdge >= scrollView.contentSize.height) { 
    pageCounter++; 


    [MBProgressHUD showHUDAddedTo:self.view animated:YES]; 
    dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, 0.01 * NSEC_PER_SEC); 
    dispatch_after(popTime, dispatch_get_main_queue(), ^(void){ 
     // Do something... 
     [self loadAdditionalJson]; 
     [MBProgressHUD hideHUDForView:self.view animated:YES]; 
    }); 

    } 
} 

А вот функция, которая называется:

-(void)loadAdditionalJson 

{

NSLog(@"%i", pageCounter); 
NSURL *url = [NSURL URLWithString:[NSString stringWithFormat: 
            @"http://ragetracks.com/?json=1&count=50&page=%i&custom_fields=PostThumb&include=title,content,attachments", 
            pageCounter]]; 


NSURLRequest *request = [NSURLRequest requestWithURL:url]; 
AFJSONRequestOperation *operation = [AFJSONRequestOperation JSONRequestOperationWithRequest:request success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) { 

    for (int x = 0; x < 50; x++) { 
     //NSLog(@"%i", pageCounter*50 -50 + x); 
     if ([JSON[@"posts"][x][@"attachments"] count] == 0) 
     { 
      NSString *temp = [NSURL URLWithString:@"nothing"]; 
      [imageUrls addObject:temp]; 
     } 
     else 
     { 
      NSString *temp1; 
      //temp1 = [NSString stringWithFormat:@"%@", JSON[@"posts"][x][@"id"]]; 
      //NSLog(temp1); 
      NSURL *imageUrl = [NSURL URLWithString: 
           [NSString stringWithFormat:@"%@", 
           JSON[@"posts"][x][@"attachments"][0][@"images"][@"medium"][@"url"]]]; 
      NSString *title = [NSString stringWithFormat:@"%@", JSON[@"posts"][x][@"title"]]; 

      NSString *label = [NSString stringWithFormat:@"%@", JSON[@"posts"][x][@"content"]]; 

      NSScanner *scanner = [NSScanner scannerWithString:label]; 
      [scanner scanUpToString:@"%2Ftracks%2F" intoString:nil]; 
      [scanner scanString:@"%2Ftracks%2F" intoString:nil]; 
      [scanner scanUpToString:@"&" intoString:&temp1]; 

      NSURL *temp2 = [NSURL URLWithString:[NSString stringWithFormat:@"https://api.soundcloud.com/tracks/%@.json?client_id=7622aa84a50c9f7609e2f7ed8bc85e81", temp1]]; 

      if (imageUrl) { 
       [imageUrls addObject:imageUrl]; 
      } 
      else{ 
       NSString *temp = [NSURL URLWithString:@"nothing"]; 
       [imageUrls addObject:temp]; 
      } 
      [titles addObject:title]; 
      [contentUrls addObject:temp2]; 

     } 
    } 
    [self.collectionView reloadData]; 

} failure:nil]; 


    [operation start]; 
} 

Загрузка анимации только появляется и исчезает слишком быстро и не отражает, как долго он принимает для приложение для загрузки новой информации. Я понимаю, что это имеет какое-то отношение к основной теме, но я точно не знаю, что делать. Я попытался отключить AFNetworkActivityIndicatorManager, но это нисколько не влияет. Спящая система задерживает его, но при этом все еще не отражает время загрузки, так как после сна он возвращается и заканчивает загрузку.

ответ

1

Ну, вы просите его ... Вы задерживаетесь на очень короткое время, прежде чем запускать нагрузку JSON (что кажется бессмысленным), а затем сразу же после запуска нагрузки отпустите индикатор прогресса.

Я думаю, что ваше замешательство в том, что вы думаете, что загрузка JSON выполняется синхронно - но это не так.

Так, удалить:

dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, 0.01 * NSEC_PER_SEC); 
dispatch_after(popTime, dispatch_get_main_queue(), ^(void){ 

Потому что это не помогает вам. Просто запустите загрузку после запуска анимации HUD. Затем, в блоке успеха (на JSONRequestOperationWithRequest), где вы обрабатывать JSON, после кода сканирования, добавьте:

[MBProgressHUD hideHUDForView:self.view animated:YES]; 

Если должен идти сразу после [self.collectionView reloadData];.

+0

Я думал, что блок успеха был выше этого, спасибо – user1933131

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