2012-02-22 11 views
8

Eventuali duplicati:
Show activity indicator during application launchL'aggiunta di un indicatore di attività di programmazione per una visualizzazione

Tutti,

Dentro la mia app delegato, ho creato una vista spruzzata animato che usa il mio predefinito .png. Tutto funziona OK, ma non riesco a capire come visualizzare ActivityIndicator in cima alla vista splash. È lì appena nascosto dalla vista splash. Ecco quello che ho e grazie:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
//... data access stuff here ... 

self.window.rootViewController = self.tabBarController; 
[self.window makeKeyAndVisible]; 

// ... more setup stuff here ... 



/**************************************************************************** 
* 
* 
* Splash Screen for iPhone 
* 
****************************************************************************/ 
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) { 


    splashView = [[UIImageView alloc] initWithFrame:CGRectMake(0,0, 320, 480)]; 
    splashView.image = [UIImage imageNamed:@"Default.png"]; 
    [self.window addSubview:splashView]; 
    [self.window bringSubviewToFront:splashView]; 
    [UIView beginAnimations:nil context:nil]; 
    [UIView setAnimationDuration:0.5]; 
    [UIView setAnimationTransition:UIViewAnimationTransitionNone forView:self.window cache:YES]; 
    [UIView setAnimationDelegate:self]; 
    [UIView setAnimationDidStopSelector:@selector(startupAnimationDone:finished:context:)]; 
    splashView.alpha = 0.0; 
    splashView.frame = CGRectMake(-60, -60, 440, 600); 
    [UIView commitAnimations]; 


    //Create and add the Activity Indicator to splashView 
    UIActivityIndicatorView *activityIndicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge]; 
    activityIndicator.alpha = 1.0; 
    activityIndicator.center = CGPointMake(160, 240); 
    activityIndicator.hidesWhenStopped = NO; 
    [splashView addSubview:activityIndicator]; 
    [activityIndicator startAnimating]; 



} 


    return YES; 
} 

risposta

22

Per tutti coloro che avevano bisogno di questo, e so che ci sono stati molti ...
(Made in Xcode versione 4.2.1)

Quindi ...

Nel AppDelegate.h aggiungere questo:

@property (nonatomic, strong) UIImageView *splashView; 

In AppDelegate.m aggiungere questo:

Nella parte superiore della pagina di cours @synthesize splashView;
E poi:

- (void) splashFade 
{ 
    splashView = [[UIImageView alloc] initWithFrame:CGRectMake(0,0, 320, 480)]; 
    splashView.image = [UIImage imageNamed:@"Default.png"]; 
    [_window addSubview:splashView]; 
    [_window bringSubviewToFront:splashView]; 
    [UIView beginAnimations:nil context:nil]; 
    [UIView setAnimationDuration:2.0]; 
    [UIView setAnimationDelay:2.5]; 
    [UIView setAnimationTransition:UIViewAnimationTransitionNone forView:_window cache:YES]; 
    [UIView setAnimationDelegate:self]; 
    [UIView setAnimationDidStopSelector:@selector(startupAnimationDone:finished:context:)]; 
    splashView.alpha = 0.0; 
    [UIView commitAnimations]; 

    //Create and add the Activity Indicator to splashView 
    UIActivityIndicatorView *activityIndicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhite]; 
    activityIndicator.alpha = 1.0; 
    activityIndicator.center = CGPointMake(160, 360); 
    activityIndicator.hidesWhenStopped = NO; 
    [splashView addSubview:activityIndicator]; 
    [activityIndicator startAnimating]; 
} 

- (void)startupAnimationDone:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context 
{ 
    [splashView removeFromSuperview]; 
} 

Il [UIView setAnimationDelay: 2,5] è responsabile per quanto tempo lo splashView sarà di fronte dal tempo di ritardo che si sceglie.

È possibile modificare la posizione dell'indicatore cambiando le nubmers di x/y in:
activityIndicator.center = CGPointMake (160, 360);

Finalmente, sotto la Methode:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 

Basta aggiungere questo:

[self performSelector:@selector(splashFade) withObject:nil]; 

e ci si va :)
Speranza ha aiutato.

Abbia un deposito piacevole programmazione ....

+0

Ciao, cosa dovrebbe fare il parametro nel (void) startupAnimationDone: (NSString *) animationID finito: (NSNumber *) finito contesto: (void *) contesto – morroko

+0

hidesWhenStopped = NO era la chiave per me, altrimenti sarebbe stato nascosto qualunque cosa – noobular

0

sembra si nasconde (alfa -> 0.0) il tuo splashView in 0,5 sec. Cosa dovresti vedere in questo caso?

+0

Yep, che appena mi dà un bel passaggio da splashView alla vista principale. Quando commento, ottengo lo stesso risultato: ActivityIndicator è nascosto dietro splashView – Slinky

0

Hai provato:

[splashView bringSubviewToFront:activityIndicator]; 
+0

Sì. Ottieni lo stesso risultato. Il problema potrebbe essere che splashView è un UIImageView. Ho sentito che a volte mettere subViews su UIImageViews non funziona – Slinky

Problemi correlati