Bonjour,
Désolé pour le temps, beaucoup de dev et peu de temps pour moi

.
Donc voici comment j'ai procéder pour utiliser le sablier.
Attention il faut bien suivre l'ordre de dev, si vous voulez pas vous retaper tout dans xCode pour remettre dans l'ordre les procédure, les classes, implémentation et autre joyeuseté. Rappelez-vous que xCode (surtout Objective-C en fait) est très rigoureux.
J'ai pris pour ce tuto le sablier fait par windev que j'ai corrigé, pour des raisons claires de protection de code; et puis comme ça vous pourrez comparer avec ce qui est fait en exemple. Et puis surtout ça m'évite de me taper des commentaires. J'ai testé c'est fonctionnel.
Dans un premier temps créez une procédure globales que vous nommerez comme vous le voulez, je le nomme IOS. Cette procédure contiendra votre déclaration et implémentation du sablier, demain vous pourrez en rajouter d'autre. Supprimer tout ce qui se trouve dedans, et passez là en Obj-C (pour ceux qui ne savent pas suffit de cliquer sur WL à coté de du nom de la procédure dans la barre). Voici ce que vous mettrez dedans :
IOS
void IOS(){}
#import <UIKit/UIKit.h>
#import <QuartzCore/QuartzCore.h>
@interface WDSablier : UIAlertView
{
UIActivityIndicatorView *IndicateurActivite;
}
@Property (nonatomic, retain) UIActivityIndicatorView *IndicateurActivite;
- (void) Ferme;
@END
@implementation WDSablier
@synthesize IndicateurActivite;
-(id)initWithFrame:(CGRect)frame
{
IF ((self = [super initWithFrame:frame]))
{
self.IndicateurActivite = [[UIActivityIndicatorView alloc] initWithFrame:CGRectMake(125, 50, 30, 30)];
[self addSubview:IndicateurActivite];
IndicateurActivite.activityIndicatorViewStyle = UIActivityIndicatorViewStyleWhiteLarge;
[IndicateurActivite startAnimating];
}
RETURN self;
}
-(void)Ferme
{
[self dismissWithClickedButtonIndex:0 animated:YES];
}
-(void)dealloc
{
[IndicateurActivite release];
}
@END
WDSablier* __SABLIER__ = nil;
Une fois cette procédure faîte, sauvegarder.
Maintenant, créer une nouvelle procédure en Objective-C (procéder comme avant) dans laquelle vous aller mettre :
void IOS_Sablier(BOOL bActif, NSString *sMessage)
{
IF (bActif == Yes) {
IF (__SABLIER__ == nil) {
__SABLIER__ = [[[WDSablier alloc]
initWithTitle:@""
Message:sMessage
delegate:nil cancelButtonTitle:nil
otherButtonTitles:nil] autorelease];
}
[__SABLIER__ show];
} ELSE {
IF (__SABLIER__ != nil) {
[__SABLIER__ Ferme];
[__SABLIER__ release];
__SABLIER__ = nil;
}
}
}
Enfin il suffit de créer une procédure en WL langage (toujours en globale) dans laquelle vous allez mettre :
Procedure GestionLoading(Afficher = Vrai, TexteAffiche = "Veuillez patienter")
SI EnModeSimulateuriOS() ALORS RETOUR
IOS_Sablier(Afficher, TexteAffiche)
Multitâche(-1)
Maintenant et pour terminer les appels :
Quand vous avez besoin d'appeler un chargement :
GestionLoading(Vrai,"Chargement en cours")
Puis après pour le terminer :
GestionLoading(Faux)
Quelques points importants :
- Si vous appeler le loading, terminer le derrière quand vous n'en avez plus besoin.
- Ne fermez pas une fenêtre sans avoir fermer le loading (vous risquez le bug de mémoire).
Et voilà vous avez un loading qui fonctionne sur un autre threads donc ne bloque votre code en cours avec un fond et une roue qui tourne et tout et tout. Enfin le système d'Apple.
Petit bonus, une procédure qui vous retourne l'id de l'appareil. Utile pour les licences.:
NSString* IOS_SysDeviceName()
{
NSString* sysName = [[UIDevice currentDevice] uniqueIdentifier];
RETURN sysName;
}