Naux
Naux

Reputation: 86

activity indicator appearing only for a second

I have 2 views 1) A 2) B

When I segue from view A to view B, it takes a long while to load, so I added an activity indicator in the segue.

My problem is, when I segue over to view B, my screen freezes(loads) in view A and only for a split second, it shows the activity indicator before going onto view B.

How do I make sure the activity indicator appears before it starts to load.

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender

{

[self useActivityIndicator];


if ([[segue identifier] isEqualToString:@"ShowAdsDetail"])
{
    //do anything that needs to be done



}

}

    -(void)useActivityIndicator{

[UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
[activityView startAnimating];
subView.hidden = NO;

}

Upvotes: 1

Views: 1534

Answers (2)

neverbendeasy
neverbendeasy

Reputation: 988

I had a similar issue with a UIActivityIndicator that was animating too fast. The segue was pushing the next view controller right away and barely showing the activity indicator.

In case this can help others - I was able to fix it by implementing performSelector:withObject:afterDelay and then, in the removeSpinner method, calling my performSegueWithIdentifier method.

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    [tableView deselectRowAtIndexPath:[tableView indexPathForSelectedRow] animated:YES];
    [self.spinner startAnimating];
    [self performSelector:@selector(removeSpinner:) withObject:self.spinner afterDelay:2.0];
}

- (void)removeSpinner: (UIActivityIndicatorView *)spinner {
    [self.spinner stopAnimating];
    [self.spinner removeFromSuperview];
    [self performSegueWithIdentifier:@"showMyPlans" sender:nil];
}

Upvotes: 1

Midhun MP
Midhun MP

Reputation: 107191

Just change your code like:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
   dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
      [self useActivityIndicator];
   });

   if ([[segue identifier] isEqualToString:@"ShowAdsDetail"])
   {
      //do anything that needs to be done
   }
}



-(void)useActivityIndicator
{
       dispatch_async(dispatch_get_main_queue(),^{
         [UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
         [activityView startAnimating];
         subView.hidden = NO;
      });
}

Upvotes: 0

Related Questions