2009-12-29 3 views
0

J'ai écrit mon code au -(void)loadView{ } pour obtenir une image d'internet en utilisant NSURL. Mais avant de charger l'image j'ai besoin de montrer le fileur (UIActivityIndicatorView).Où utiliser UIActivityIndicatorView?

#import "ImageFromWebViewController.h" 
#define USE_TEST_SERVER 1 
@implementation ImageFromWebViewController 
+(NSString *)fileName 
{ 
#if USE_TEST_SERVER 
    return @"http://happyhyderabad.files.wordpress.com/2009/04/anushka4.jpg"; 
#else 
    return @"http://nutritionresearchcenter.org/healthnews/wp-content/uploads/2008/07/johnny_depp.jpg"; 
#endif 
} 

- (void)loadView { 
    NSString *urlString = [ImageFromWebViewController fileName]; 
    NSURL *url = [NSURL URLWithString:urlString]; 
    UIImage *image = [UIImage imageWithData:[NSData dataWithContentsOfURL:url]]; 
    imageView = [[UIImageView alloc] initWithImage:image]; 
    contentView = [[UIScrollView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]]; 
    [contentView setContentSize:[image size]]; 
    [contentView addSubview:imageView]; 
    [imageView setUserInteractionEnabled:NO]; 
    self.view = contentView; 
} 

- (void)didReceiveMemoryWarning { 
     [super didReceiveMemoryWarning]; 
     } 

- (void)dealloc { 
    [imageView release]; 
    [contentView release]; 
    [super dealloc]; 
} 
@end 

En viewDidLoad j'ai écrit le code pour UIActivityIndicatorView mais la fileuse a commencé après le chargement de l'image et il ne s'arrête pas.

Où dois-je écrire le code pour le spinner?

Répondre

1

Vous devez d'abord télécharger l'image dans un fil d'arrière-plan. Dans viewDidLoad, vous devez commencer votre spinner, puis lancer votre fil de fond. Cacher le fileur et dessiner l'image est à vous de décider comment vous voulez le faire. Vous pouvez masquer le spinner dans votre thread d'arrière-plan une fois le téléchargement terminé, mais il est généralement préférable de ne pas modifier l'interface utilisateur à partir d'un thread autre que le thread principal.

Si vous ne voulez pas vous tracasser avec vos propres threads d'arrière-plan, jetez un oeil à [NSURLConnection connectionWithRequest:delegate:]. Cela lancera son propre thread d'arrière-plan pour vous permettre de charger des données de manière asynchrone. Dans ce cas, commencez encore votre fileur dans viewDidLoad, puis faites face à la NSURLConnection choses, et dans la méthode de rappel de délégué qui est appelée lorsque les données sont finies de téléchargement, cachez le fileur (puisque vous serez de retour dans le fil principal à cette point, je crois).

Questions connexes