2009-08-31 9 views
0

Je voulais faire un préchargement circulaire dans mon application iPhone, mais j'ai eu du mal à commencer. J'utilisais Sequel Pro aujourd'hui et j'ai vu qu'ils avaient exactement ce que je voulais et c'était open source, alors j'ai téléchargé la source et je n'ai rien trouvé.Preloader Cercle dans l'objectif C

Je suis à la recherche d'un départ sur la façon de faire quelque chose le long des lignes de:

alt text http://www.grabup.com/uploads/c7b2d101cd9caf0d927c2fa8a7850ba2.png

ou

alt text http://www.grabup.com/uploads/fc8520a4425331a3a6a0cbf6508b510f.png

J'ai trouvé quelques tutoriels flash, mais il est difficile de traduire cela en code utilisable en Objective-C.

Merci d'avance.

Répondre

3

Il ne serait pas difficile de créer une sous-classe UIView à cette fin. Dans la sous-classe que vous voulez faire à peu près ce qui suit dans la routine drawRect:

CGContextRef context = UIGraphicsGetCurrentContext(); 
CGFloat  center_x = self.frame.size.width/2; 
CGFloat  center_y = self.frame.size.height/2; 
double  progress = 0.42; // A floating-point number from 0..1 inclusively 

// draw the frame 
CGContextAddArc(context, 
       center_x, 
       center_y, 
       std::min(self.frame.size.width, self.frame.size.height), 
       0, 
       M_PI * 2, 
       1 /*clockwise*/); 
CGContextStrokePath(context); 

// draw the progress indicator 
CGContextAddArc(context, 
       center_x, 
       center_y, 
       std::min(self.frame.size.width, self.frame.size.height), 
       0, 
       M_PI * 2 * progress, 
       1 /*clockwise*/); 
CGContextFillPath(context); 
+0

Point mineur: ces variables CGPoint devraient être déclarées comme CGFloat. – Don

0

Vous voulez dire un indicateur de progression, comme celui inclus dans Interface Builder, mais circulaire? Je suppose qu'il y en a un par défaut dans le framework Flex pour lequel vous avez vu les tutoriels.

Je pense que vous devrez faire cela par vous-même. Ce que vous pouvez faire est d'avoir une vue qui écoute les notifications de progression d'un objet. Lorsqu'il les reçoit, vous devez calculer l'image à afficher et appeler la méthode viewNeedsDisplay. J'ai jeté un rapide coup d'œil à la source Sequel Pro, et je pense que ce que vous cherchez est le NSProgressIndicator. Mais Sequel Pro est une application de bureau et a plus de flexibilité que l'iPhone. L'équivalent de Cocoa Touch serait UIActivityIndicatorView, qui est toujours indéterminé (c'est-à-dire que vous ne pouvez pas spécifier le pourcentage d'achèvement). Editer: oui, voir le code de fbrereton ci-dessus pour la routine de dessin.

Et voici comment vous écouter les notifications pour obtenir que des progrès valeur à virgule flottante:

[[NSNotificationCenter defaultCenter] addObserver:self 
              selector:@selector(receivedProgress:) 
               name:@"MyProgressIndication" 
               object:nil]; 

Vous seriez les poster de l'objet qui est de faire le travail comme celui-ci:

[[NSNotificationCenter defaultCenter] postNotificationName:@"MyProgressIndication" 
                 object:[NSNumber numberFromFloat:progress]]; 

Une constante pour le nom de la notification serait la meilleure.

1

Vous devez utiliser la bibliothèque AnimatedGif et télécharger un fichier GIF animé depuis preloaders.net ou autre.

Il suffit de le faire par programmation (sans IB). C'est très simple. Voici le code:

AnimatedGif *animatedGif = [[[AnimatedGif alloc] init] autorelease];  
NSData *data = [NSData dataWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"circle-loader" ofType:@"gif"]]; 
[animatedGif decodeGIF: data]; 
self.loadingImage = [animatedGif getAnimation]; //self.loadingImage is a UIImageView 
[self.view addSubview:loadingImage]; 

Puis, plus tard, quand vous voulez supprimer le GIF:

[loadingImage removeFromSuperview]; 
[loadingImage release]; 
Questions connexes