2011-05-02 3 views
0

Je construis une application iphone qui a besoin de télécharger beaucoup de requêtes HTTP au lancement. Ce qui signifie qu'il faut beaucoup de temps pour charger. Les requêtes HTTP et les réponses sont traitées dans la méthode viewDidLoad de mon viewController.Comment afficher une image lors du chargement de l'application iPhone?

L'écran est blanc lorsque ce processus est en cours. Je me demande s'il existe un moyen facile de montrer une image au lieu de simplement l'écran blanc au cours de ce processus.

Répondre

0

Comme mentionné dans beaucoup d'endroits ici dans SO, vous ne voulez pas faire ce genre de travail dans viewDidLoad parce que c'est votre thread d'interface utilisateur principale. Faites-le dans un autre thread et utilisez le thread principal pour afficher un indicateur d'activité ou une barre de progression pendant que vous chargez du contenu sur l'autre thread.

0

est cette manière la plus simple (même si je ne le recommanderais pas, IIRC elle "fonctionne"):

  1. afficher quelque chose au début de votre viewDidLoad (par exemple un UIProgressView)
  2. Appel [[NSRunLoop currentRunLoop] runUntilDate: [NSDate timeIntervalSinceNow: 0,1]], qui permet à l'écran de mise à jour (NB: Je n'ai pas tapé ceux Xcode, les noms de méthode sont du haut de ma tête)
  3. Faites votre travail long

... mais cela gèlera toute l'interface utilisateur pendant son exécution. La méthode correcte consiste à exécuter votre chargement d'image dans un thread d'arrière-plan et à le déplacer complètement de la méthode "viewDidLoad". par exemple. utiliser

performSelectorInBackground: ... 

... qui vous laissera passer dans un @selector en nommant l'autre méthode que vous voulez faire tout le travail de chargement. Ceci est conçu pour être très facile à lire - vous n'avez pas besoin de savoir quoi que ce soit à propos de NSThread pour le faire fonctionner.

0

Vous pouvez afficher une image que l'application des lancements et des charges:

Cliquez sur le projet et un écran avec des orientations icônes d'applications et le démarrage-Picture doit apparaître; faites glisser votre écran de chargement dans les conteneurs d'image qui disent «Lancer les images» un pour l'affichage normal, le second pour l'affichage de la rétine. Ces deux doivent s'afficher pendant le chargement de votre application. Bonne chance!

+1

Oui, bien qu'un danger ici est que Apple peut auto-tuer votre application quand il fonctionne sur un vrai téléphone si elle prend trop de temps au démarrage. Mais vous ne le verrez pas lors du test, car lorsque vous exécutez des générations de développeur, le comportement d'auto-destruction est désactivé en mode silencieux. – Adam

+0

Hmm ... je n'y avais jamais pensé. Merci de m'avoir permis de le faire maintenant: Je vais vous parler de votre cause, c'est important. – DailyDoggy

0

Utilisez un hud comme ATMHud:

// show hud 
[hud setCaption:@"Working..."]; 
[hud setActivity:YES]; 
[hud show]; 

// ...do your HTTP requests here... 

// update hud 
[hud setCaption:[NSString stringWithFormat:@"done with %@",result]]; 
[hud setActivity:NO]; 
[hud setImage:[UIImage imageNamed:@"19-check"]]; 
[hud update]; 
[hud hideAfter:2.0]; 

Le projet lié a un exemple simple que vous pouvez exécuter pour voir à quoi il ressemble.

Questions connexes