Animer Spinner lors du chargement d'une nouvelle page
J'ai un UITableView qui, en externe, flux RSS.
Lorsque vous sélectionnez une ligne, il utilise navigationController et diapositives à partir de la droite, le problème est que le flux RSS contient des images donc on peut prendre de quelques secondes à charger et sans aucune indication de ce qui se passe, vous pouvez le prendre pour un plantage de l'application.
J'ai décidé d'ajouter un compteur de sorte que vous savez que la nouvelle page est en cours de chargement.
Voici mon code:
RootViewController.m
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
NSLog(@"Loading New Page");
[tableView deselectRowAtIndexPath:indexPath animated:YES];
DetailsViewController *detailViewController = [[DetailsViewController alloc] initWithNibName:@"DetailsViewController" bundle:nil];
detailViewController.item = [rssItems objectAtIndex:floor(indexPath.row/2)];
[self.navigationController pushViewController:detailViewController animated:YES];
[detailViewController release];
UIActivityIndicatorView *spinner = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
spinner.center = CGPointMake(160, 240);
[self.view addSubview:spinner];
[spinner startAnimating];
[spinner release];
}
DetailsViewController.m
- (void)viewDidLoad {
[super viewDidLoad];
NSString *imgURL = [item objectForKey:@"image"];
NSData *mydata = [[NSData alloc] initWithContentsOfURL:[NSURL URLWithString:imgURL]];
item_photo.image = [[UIImage alloc] initWithData:mydata];
item_title.text = [item objectForKey:@"title"];
item_date.text = [NSString stringWithFormat:@"Date: %@",[item objectForKey:@"date"]];
item_time.text = [NSString stringWithFormat:@"Time: %@",[item objectForKey:@"time"]];
item_cost.text = [NSString stringWithFormat:@"Cost: £%@",[item objectForKey:@"cost"]];
item_info.text = [item objectForKey:@"description"];
self.navigationItem.title = @"Event Type";
}
Il y a deux problèmes avec ce code.
- De la Toupie n'est pas actif jusqu'à ce que après la nouvelle page est chargée.
- De la Toupie ne pas désactiver une fois chargé.
Si quelqu'un pouvait m'aider avec ce problème je serais vraiment avec gratitude.
source d'informationauteur Eli Stone
Vous devez vous connecter pour publier un commentaire.
Vous ajoutez le voyant d'activité de l'afficher à la vue du contrôleur qui est en poussant la vue de détail de contrôleur, de sorte que vous ne verrez pas de toute façon
essayez de déplacer le deuxième groupe de code à la méthode viewDidLoad de DetailsViewController, vous pouvez appeler stopAnimating sur l'indicateur d'activité lorsque vous avez fini de charger. Pour obtenir une référence à la UIActivityIndicator vous devez ajouter une balise
par exemple, dans le viewDidLoad
dans le loadingFinished méthode (selon la méthode est appelée lors de la fin du chargement)
Vous avez besoin de faire un peu de travail dans un thread d'arrière-plan. Si la ligne suivante est celle qui prend le temps:
Alors vous pourriez le faire dans l'arrière-plan avec PGCD:
Et +1 pour @wattson12 - vous besoin pour ajouter la touche de navigation pour la nouvelle vue à la place. Vous pouvez également ajouter la touche de navigation pour la vue en cours, et au lieu de mettre le
pushViewController
appel dans votre PGCD principale de la file d'attente du bloc.Dernier point, il est préférable de retirer la casserole de son superview une fois que vous arrêtez l'animation. Alternativement, vous pouvez avoir une seule instance de la toupie, et de définir
hidesWhenStopped
OUI.C'est une roue qui tourne sur une vue floue dans swift: